Cookbook

Claude Desktop Cookbook

Connect Claude Desktop to the Leto SEO MCP server via mcp-remote. Estimated time: ~10 minutes.

What you'll build

By the end of this guide you will have Claude Desktop connected to the Leto SEO MCP server. Claude will be able to call all 10 orb_* tools, 2 literal resources, and 3 resource templates directly from natural-language prompts in your conversations. You will run one tool (portfolio health check) and read one templated resource (site metrics) to confirm end-to-end connectivity.

Prerequisites

Step 1 — Locate your config file

Claude Desktop reads MCP server configuration from a JSON file. The file may not exist yet — if it doesn't, Claude Desktop will create it the first time you edit it through the settings UI.

bash
# macOS
~/Library/Application\ Support/Claude/claude_desktop_config.json

# Windows
%APPDATA%\Claude\claude_desktop_config.json
Tip: You can also open the file directly from Claude Desktop by going to Settings Developer Edit Config. This creates the file if it doesn't already exist.

Step 2 — Add the Leto MCP server

Open claude_desktop_config.json in any text editor and add (or merge) the following JSON. Replace sk_live_xxxx... with your actual API key.

json
{
  "mcpServers": {
    "letoseo": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://letoseo.com/api/mcp/mcp",
        "--header",
        "Authorization:Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
      ]
    }
  }
}
Why mcp-remote? The Claude Desktop Custom Connectors UI is designed for OAuth-based authentication flows. Leto SEO uses Bearer API keys rather than OAuth in V1, so a direct connector entry won't have a place to inject the Authorization header. mcp-remote runs as a local stdio process that forwards every MCP message to the remote Streamable HTTP endpoint (https://letoseo.com/api/mcp/mcp) while injecting the Authorization: Bearer ... header on each request.

Step 3 — Restart Claude Desktop

Claude Desktop reads its config file only at startup. You must perform a full quit and relaunch — closing the window is not sufficient.

  • macOS: Press Cmd-Q or choose Claude → Quit Claude from the menu bar.
  • Windows: Right-click the Claude icon in the system tray and choose Quit.

After quitting, relaunch Claude Desktop normally.

Step 4 — Verify the connection

Start a new conversation in Claude Desktop. In the bottom-right corner of the conversation input area you should see a small slider or tools icon — this is the MCP indicator. Click it to expand the list of connected servers and tools.

Under the letoseo server entry you should see all 10 tools listed:

  • orb_portfolio_healthGet health scores, trends, and alert counts for all sites in the portfolio.
  • orb_site_overviewGet detailed overview for a specific site: health score, KPIs, trend chart, and top pages.
  • orb_keyword_trendsGet top search queries with impressions, clicks, CTR, position, and period-over-period changes.
  • orb_traffic_overviewGet traffic metrics: sessions, engagement rate, and top pages by traffic.
  • orb_cwv_statusGet Core Web Vitals status: LCP, INP/TBT, CLS with pass/fail, and PSI category scores.
  • orb_alert_feedGet alerts with type, severity, metric context, and affected URLs.
  • orb_index_coverageGet index coverage: indexed/excluded/error counts and trend vs 7 days ago.
  • orb_compare_sitesCompare metrics across multiple sites side by side.
  • orb_campaign_listGet all campaigns for a site with click and session totals.
  • orb_campaign_detailGet campaign details with links, KPIs, and channel breakdown.

The 2 literal resources (letoseo://portfolio/summary, letoseo://alerts/active) and the 3 resource templates (letoseo://sites/{siteId}/metrics, letoseo://sites/{siteId}/pages, letoseo://sites/{siteId}/campaigns) will be visible in the attachment menu (paperclip icon) when you start composing a message.

Step 5 — Try a tool

In a new conversation, type the following prompt:

"List my SEO portfolio's health using Leto."

Claude will recognize that the orb_portfolio_health tool is the right one to call, request your confirmation (Claude Desktop shows a tool-use approval dialog before calling external servers), and then display a formatted summary of each site's health score, traffic trend, and active alert count. If you have multiple sites in your portfolio you'll see one entry per site.

Step 6 — Read a templated resource

Resource templates let Claude substitute a variable (like a site UUID) into a letoseo:// URI and call resources/read. This is distinct from calling a tool — it returns a document-style snapshot rather than a computed result.

Try this prompt (replace the UUID with one of your actual site IDs, which you can get from the orb_portfolio_health response above):

"Read the metrics resource for site 00000000-0000-0000-0000-000000000001."

Claude will substitute the UUID into the letoseo://sites/{siteId}/metrics template, producing the concrete URI:

bash
letoseo://sites/00000000-0000-0000-0000-000000000001/metrics

The MCP server resolves this via a resources/read call and returns the latest metric snapshots — organic sessions, KPI trends, and period — which Claude then summarizes in plain English. This demonstrates the full resource-template flow: template discovery, variable substitution, and resources/read against a concrete letoseo:// URI.

Troubleshooting

Server doesn't appear in the tools list

  • Validate your JSON — trailing commas and unquoted keys will silently break the config. Use a JSON validator before saving.
  • Confirm mcp-remote is reachable via npx:
bash
npx -y mcp-remote --version
  • Check Claude Desktop's MCP logs for startup errors:

macOS:

~/Library/Logs/Claude/mcp*.log

Windows:

%APPDATA%\Claude\logs\

401 or 403 authentication errors

Confirm your API key is valid and active. Send the same Bearer token to an authenticated REST endpoint — the public health endpoint does not require auth, so it cannot distinguish a valid key from a missing one. Use /api/v1/portfolio instead:

bash
curl -H "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  https://letoseo.com/api/v1/portfolio

A working key returns a normal JSON envelope with your portfolio data ( 200 OK). 401 means the key is wrong or missing; 403 with owner_pending_approval or owner_deletion_pending means the key is real but the owner status blocks API access. The MCP layer applies the same rules — see Authentication — owner gating for details.

Rate limit errors

The MCP server shares the same rate-limit window as the REST API. If you hit the limit during a conversation-heavy session, wait a minute before retrying. See Authentication — rate limits for the per-key limits and reset behaviour.

What's next