MCP

MCP Resources

Leto SEO exposes two flavors of MCP resource. Literal resources have fixed URIs and appear in resources/list responses. Resource templates have variable URIs and appear in resources/templates/list responses — clients substitute variables to read.

All resources are read via a resources/read JSON-RPC 2.0 request with the resource URI in params.uri. Resources use the letoseo:// URI scheme. All resources require a valid Bearer token — see the MCP overview for authentication details.

Literal resources

These 2 resources have fixed URIs and appear in resources/list responses. They return a snapshot of the portfolio at the time of the request.

portfolio_summary

URIletoseo://portfolio/summary

Portfolio health snapshot for all sites.

Example request

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "resources/read",
  "params": {
    "uri": "letoseo://portfolio/summary"
  }
}

Example result

json
{
  "contents": [
    {
      "uri": "letoseo://portfolio/summary",
      "text": "[{\"id\":\"00000000-0000-0000-0000-000000000001\",\"name\":\"Acme Demo Co\",\"url\":\"https://acme-demo.example\",\"healthScore\":72,\"maturity\":\"established\",\"activeAlertCount\":1,\"trendDirection\":\"up\",\"organicSessions30d\":3850,\"impressions30d\":18400}]"
    }
  ]
}

active_alerts

URIletoseo://alerts/active

All active alerts across the portfolio.

Example request

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "resources/read",
  "params": {
    "uri": "letoseo://alerts/active"
  }
}

Example result

json
{
  "contents": [
    {
      "uri": "letoseo://alerts/active",
      "text": "[{\"id\":\"00000000-0000-0000-0000-000000000030\",\"site_id\":\"00000000-0000-0000-0000-000000000001\",\"site_name\":\"Acme Demo Co\",\"type\":\"traffic_drop\",\"severity\":\"critical\",\"status\":\"active\",\"message\":\"Organic sessions dropped 54% vs 7-day average\",\"created_at\":\"2025-01-14T06:45:00.000Z\"}]"
    }
  ]
}

Resource templates

These 3 resource templates have variable URIs (RFC 6570 format) and appear in resources/templates/list responses. Substitute the variables in the URI template to form a concrete resources/read request.

site_metrics

URI templateletoseo://sites/{siteId}/metrics

Latest metric snapshots for a site.

Variables

NameTypeRequiredDescriptionDefault
siteIduuidrequiredThe site UUID.

Example URIletoseo://sites/00000000-0000-0000-0000-000000000001/metrics

Example request

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "resources/read",
  "params": {
    "uri": "letoseo://sites/00000000-0000-0000-0000-000000000001/metrics"
  }
}

Example result

json
{
  "contents": [
    {
      "uri": "letoseo://sites/00000000-0000-0000-0000-000000000001/metrics",
      "text": "{\"site\":{\"id\":\"00000000-0000-0000-0000-000000000001\",\"name\":\"Acme Demo Co\",\"url\":\"https://acme-demo.example\",\"maturity\":\"established\",\"health_score\":72},\"kpis\":{\"organic_sessions\":{\"value\":3850,\"change\":\"+12.6%\",\"direction\":\"up\"}},\"period\":\"28d\"}"
    }
  ]
}

site_pages

URI templateletoseo://sites/{siteId}/pages

Top pages with CWV status for a site.

Variables

NameTypeRequiredDescriptionDefault
siteIduuidrequiredThe site UUID.

Example URIletoseo://sites/00000000-0000-0000-0000-000000000001/pages

Example request

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "resources/read",
  "params": {
    "uri": "letoseo://sites/00000000-0000-0000-0000-000000000001/pages"
  }
}

Example result

json
{
  "contents": [
    {
      "uri": "letoseo://sites/00000000-0000-0000-0000-000000000001/pages",
      "text": "[{\"url\":\"https://acme-demo.example/blog/example-post\",\"title\":\"Example Post — Acme Marketing Blog\",\"organic_sessions_30d\":185,\"impressions_30d\":4200,\"clicks_30d\":210,\"ctr\":0.05,\"avg_position\":8.3,\"cwv_status\":\"pass\",\"index_status\":\"indexed\"}]"
    }
  ]
}

site_campaigns

URI templateletoseo://sites/{siteId}/campaigns

Active campaigns with metrics summary for a site.

Variables

NameTypeRequiredDescriptionDefault
siteIduuidrequiredThe site UUID.

Example URIletoseo://sites/00000000-0000-0000-0000-000000000001/campaigns

Example request

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "resources/read",
  "params": {
    "uri": "letoseo://sites/00000000-0000-0000-0000-000000000001/campaigns"
  }
}

Example result

json
{
  "contents": [
    {
      "uri": "letoseo://sites/00000000-0000-0000-0000-000000000001/campaigns",
      "text": "[{\"id\":\"00000000-0000-0000-0000-000000000010\",\"name\":\"Acme Q1 Launch\",\"slug\":\"acme-q1-launch\",\"status\":\"active\",\"total_clicks\":342,\"total_sessions\":187,\"channels\":[\"email\",\"social\"]}]"
    }
  ]
}