Skip to content
Docs

Search the docs

Find a page or a section

MCP

Connect your AI to Claude, Cursor and more

Give Claude, Cursor, VS Code or any MCP client access to your uare.ai AI in about two minutes.

View as Markdown

Your MCP server lets your AI work inside the tools you already use, as you. It's a remote server that speaks the streamable HTTP transport and authenticates with your personal API key:

https://app.uare.ai/api/v1/mcp

1. Create an API key

  1. Open Settings → API keys in uare.ai. Settings also opens with ⌘, on a Mac or Ctrl+, elsewhere.
  2. Select Generate new key and name it after the client you'll use, for example Claude Desktop.
  3. Copy the key.

Keys start with uare_pk_. API keys covers revoking and replacing them.

2. Add the server to your client

Pick your client. Claude Code, Cursor and VS Code read the key from a UARE_API_KEY environment variable or a secure prompt, so it never sits in their config. Claude Desktop needs the key in its config file, so keep that file private.

claude mcp add --transport http uare https://app.uare.ai/api/v1/mcp \
  --header 'Authorization: Bearer ${UARE_API_KEY}'

Where each one goes:

  • Claude Code: run the command in your terminal. Keep the single quotes: Claude Code stores ${UARE_API_KEY} itself and reads the variable each time it connects, so export UARE_API_KEY=uare_pk_... in the shell you start it from. With double quotes, your shell would write the key into Claude Code's config.
  • Cursor: ~/.cursor/mcp.json for every project, or .cursor/mcp.json in one project. Cursor reads ${env:UARE_API_KEY} from the environment it was started in, so a Cursor opened from the Dock won't see a key exported in your shell. In that case, put the key directly in the header and keep the file out of version control.
  • VS Code: .vscode/mcp.json in your workspace. VS Code asks for the key the first time the server starts and stores it securely.
  • Claude Desktop: Settings, then Developer, then Edit Config. Restart Claude Desktop after saving. Claude Desktop connects through mcp-remote, which needs Node.js. On Windows, see below.

Claude Desktop on Windows

On Windows, Claude Desktop doesn't escape the spaces inside args when it starts npx, so mcp-remote gets the Authorization header in pieces. mcp-remote's own workaround is a header argument with no spaces, with the whole value, Bearer included, in the environment variable:

JSON
{
  "mcpServers": {
    "uare": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote@latest",
        "https://app.uare.ai/api/v1/mcp",
        "--header",
        "Authorization:${AUTH_HEADER}"
      ],
      "env": {
        "AUTH_HEADER": "Bearer uare_pk_your_key_here"
      }
    }
  }
}

Keep Authorization:${AUTH_HEADER} exactly as it is, with no space after the colon.

3. Try it

Ask your client to use uare, for example:

  • "Use uare to draft a LinkedIn post about what we learned launching our beta."
  • "Ask my uare AI how it would reply to this email: …"
  • "Use uare's decide tool: should I take the offer from A or from B?"
  • "Ask uare to find the latest email from my accountant."

The client picks the matching tool: generate_post, respond_as_me, decide or act.

Use the tools from your own code

Your own server can call the tools too, for features only you use, such as a "draft a post in my voice" button in your site's admin. Connect with an MCP SDK and your key. In Node.js, with the official SDK:

Bash
npm install @modelcontextprotocol/sdk
draft-post.mjs
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";

const client = new Client({ name: "my-site-admin", version: "1.0.0" });
await client.connect(
  new StreamableHTTPClientTransport(new URL("https://app.uare.ai/api/v1/mcp"), {
    requestInit: { headers: { Authorization: `Bearer ${process.env.UARE_API_KEY}` } },
  }),
);

const result = await client.callTool({
  name: "generate_post",
  arguments: { topic: "What we learned launching our beta", platform: "linkedin" },
});
// generate_post answers with one text block holding its JSON result.
const { post } = JSON.parse(result.content[0].text);
console.log(post);

await client.close();

Results come back as JSON in text blocks: one block for a single result, one block per entry for a list such as list_skills. The tools reference lists each tool's fields.

Limits

  • 120 requests per minute for each key owner, and 600 per minute from one network address before authentication.
  • Changes through your connected apps wait for confirm_action. A confirmation token works once and expires after about 10 minutes.

Next steps