Connect AI tools with MCP

The Surfaced MCP server lets AI coding assistants check the page you are building for SEO and AEO issues, read your reports and apply fixes in your codebase. It works with Claude Code, Claude Desktop, Cursor, VS Code and any client that supports remote MCP servers.

By · Updated

What can your assistant do with it?#

  • Check a page while you build. Pass the HTML of a page or component and get a score plus a prioritised list of fixes. Free.
  • Draft an llms.txt from your site's own pages. Free.
  • Run a full audit with competitors and AI visibility, then read the fix plan with ready-to-paste JSON-LD and meta tags. 1 credit plus 1 per 3 AI-visibility questions, usually 2 or 3.
  • Read the latest report for any site in your workspace.

See every tool and its inputs in the tools reference.

What is the fastest way to set it up?#

Let your AI assistant do it. Pick your tool, copy the prompt and paste it into the agent. It writes the config, checks the connection with a free tool and tells you your credit balance. You only need an API key (step 1 below); the agent asks for it.

Set it up with AI

Copy this prompt into Claude Code, Cursor or any agent. It adds the server, checks the connection and reports back.

Connect the Surfaced MCP server to this AI tool and confirm it works.

## Server
- Name: surfaced
- URL: https://getsurfaced.in/api/mcp
- Transport: Streamable HTTP (a remote server; nothing to install or run locally)
- Auth: send the header `Authorization: Bearer <API key>`
- API key: ask me for it before you start (it starts with sfc_; I create it in Surfaced under Settings → API and MCP). Never make one up. Use it wherever SURFACED_API_KEY appears below.

## Steps
1. Work out which tool you are running in, then follow only the matching instructions:

Claude Code: run this in the terminal (add `--scope user` before `surfaced` to make it available in every project):
```
claude mcp add --transport http surfaced https://getsurfaced.in/api/mcp --header "Authorization: Bearer SURFACED_API_KEY"
```
Then check it with `claude mcp list`. If the tools are not available in this session yet, tell me to run /mcp or restart Claude Code.

Cursor: add this server to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (this project). Merge it into the existing "mcpServers" object; do not remove other servers.
```json
{ "mcpServers": { "surfaced": { "url": "https://getsurfaced.in/api/mcp", "headers": { "Authorization": "Bearer SURFACED_API_KEY" } } } }
```
Then tell me to enable "surfaced" under Cursor Settings → MCP if it is not on already.

VS Code (GitHub Copilot agent mode): add this to .vscode/mcp.json, merging with anything already there. The key is asked for once and stored by VS Code, not written to the file.
```json
{
  "inputs": [{ "type": "promptString", "id": "surfaced-key", "description": "Surfaced API key", "password": true }],
  "servers": { "surfaced": { "type": "http", "url": "https://getsurfaced.in/api/mcp", "headers": { "Authorization": "Bearer ${input:surfaced-key}" } } }
}
```
Then tell me to click Start above the server in mcp.json and paste the key when asked.

Claude Desktop: it connects to remote servers with header auth through the mcp-remote bridge, which needs Node.js. Add this to claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), merging into "mcpServers":
```json
{ "mcpServers": { "surfaced": {
  "command": "npx",
  "args": ["-y", "mcp-remote", "https://getsurfaced.in/api/mcp", "--header", "Authorization:Bearer ${SURFACED_KEY}"],
  "env": { "SURFACED_KEY": "SURFACED_API_KEY" }
} } }
```
If you cannot edit files yourself, give me the merged file and the exact path, then tell me to fully quit and reopen Claude Desktop.

Windsurf: add this to ~/.codeium/windsurf/mcp_config.json, merging into "mcpServers":
```json
{ "mcpServers": { "surfaced": { "serverUrl": "https://getsurfaced.in/api/mcp", "headers": { "Authorization": "Bearer SURFACED_API_KEY" } } } }
```
Then tell me to press Refresh in Windsurf's MCP panel.

If you are a different MCP client, add a remote Streamable HTTP server with the URL and Authorization header above, following your own documentation.

2. Keep the key out of git. Prefer user-level config; if you write it into a project file, make sure that file is gitignored or use the tool's own secret prompt.
3. Load the server, then list its tools. You should see: check_page, generate_llms_txt, list_sites, get_report, run_audit, get_audit, get_credits.
4. Call get_credits and tell me my balance and what a report costs.
5. Find this project's main page (for example app/page.tsx, pages/index.tsx, src/routes/+page.svelte or index.html). Get its HTML, rendered if you can, and call check_page with it (pass page_url if you know the live URL). Summarise the top fixes in plain language, then ask me before changing any files.

## Rules
- Do not call run_audit during setup; it uses credits. check_page and generate_llms_txt are free.
- If you get 401 Unauthorized, the key is wrong or revoked: stop and ask me for a new one.
- If the tools do not show up, show me the exact config you wrote, where you wrote it, and any error from the MCP log. Do not guess at fixes more than once.

Prefer to do it by hand? Follow the steps below.

1. Create an API key#

In Surfaced, open Settings → API and MCP and click Create key. Copy it right away: keys start with sfc_ and are shown once. Each key belongs to a workspace and uses its credits.

2. Add the server to your tool#

The server URL is https://getsurfaced.in/api/mcp. It uses the Streamable HTTP transport and authenticates with your key in the Authorization header.

Claude Code

terminal
claude mcp add --transport http surfaced https://getsurfaced.in/api/mcp \
  --header "Authorization: Bearer sfc_your_key"

Add --scope project to share it with your team through .mcp.json (use an environment variable for the key).

Cursor

~/.cursor/mcp.json (or .cursor/mcp.json in a project)
{
  "mcpServers": {
    "surfaced": {
      "url": "https://getsurfaced.in/api/mcp",
      "headers": { "Authorization": "Bearer sfc_your_key" }
    }
  }
}

VS Code (GitHub Copilot agent mode)

.vscode/mcp.json
{
  "inputs": [
    { "type": "promptString", "id": "surfaced-key", "description": "Surfaced API key", "password": true }
  ],
  "servers": {
    "surfaced": {
      "type": "http",
      "url": "https://getsurfaced.in/api/mcp",
      "headers": { "Authorization": "Bearer ${input:surfaced-key}" }
    }
  }
}

Claude Desktop

Claude Desktop connects to remote servers with header auth through the mcp-remote bridge (requires Node.js).

claude_desktop_config.json
{
  "mcpServers": {
    "surfaced": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote", "https://getsurfaced.in/api/mcp",
        "--header", "Authorization:Bearer ${SURFACED_KEY}"
      ],
      "env": { "SURFACED_KEY": "sfc_your_key" }
    }
  }
}
Web connectors in claude.ai need OAuth, which this server doesn't offer yet. Use Claude Code, Claude Desktop, Cursor or VS Code.

3. Try it#

Ask your assistant things like:

  • “Check the HTML that app/page.tsx renders for SEO and AEO issues and fix them.”
  • “Generate an llms.txt for https://example.com and save it to public/llms.txt.”
  • “Run a Surfaced audit on https://example.com with competitor.com, wait for it, then add the JSON-LD it recommends to the layout.”
  • “What are the top 3 fixes in the latest Surfaced report for example.com?”

How do I test the connection?#

List the tools with a plain JSON-RPC request. A 401 means the key is missing or revoked.

terminal
curl https://getsurfaced.in/api/mcp \
  -H "Authorization: Bearer sfc_your_key" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Limits and security#

  1. Up to 120 MCP requests a minute per workspace; full audits are limited to 10 a minute.
  2. Keys are stored hashed. Revoke a key any time in Settings; it stops working immediately.
  3. check_page fetches public URLs only. To check a local or unpublished page, pass its HTML instead.