Skip to contents

Together, these functions implement a model context protocol server for your R session.

Usage

mcp_server(tools = btw::btw_tools())

mcp_session()

Arguments

tools

A list of tools created with ellmer::tool() that will be available from the server. Any list that could be passed to Chat$set_tools() can be passed here. By default, the package will use btw::btw_tools().

Configuration

mcp_server() should be configured with the MCP clients via the Rscript command. For example, to use with Claude Desktop, paste the following in your Claude Desktop configuration (on macOS, at file.edit("~/Library/Application Support/Claude/claude_desktop_config.json")):

{
  "mcpServers": {
    "r-acquaint": {
      "command": "Rscript",
      "args": ["-e", "acquaint::mcp_server()"]
    }
  }
}

Or, to use with Claude Code, you might type in a terminal:

claude mcp add -s "user" r-acquaint Rscript -e "acquaint::mcp_server()"

mcp_server() is not intended for interactive use.

The server interfaces with the MCP client on behalf of your R session. Use mcp_session() to make your R session available to the server. Place a call to acquaint::mcp_session() in your .Rprofile, perhaps with usethis::edit_r_profile(), to make every interactive R session you start available to the server.

See also

Examples

# should only be run non-interactively, and will block the current R process
# once called.
if (FALSE) {
# to just start a server with btw tools:
mcp_server()

# to do so with non-default tools:
library(ellmer)

tool_rnorm <- tool(
  rnorm,
  "Draw numbers from a random normal distribution",
  n = type_integer("The number of observations. Must be a positive integer."),
  mean = type_number("The mean value of the distribution."),
  sd = type_number("The standard deviation of the distribution. Must be a non-negative number.")
)

mcp_server(tools = list(tool_rnorm))
}
if (interactive()) {
mcp_session()
}