MCP

MCP Tools

10 callable tools exposed by the Leto SEO MCP server. Call each tool via a tools/call JSON-RPC request on the MCP transport.

Tools are invoked with a tools/call JSON-RPC 2.0 request. The params.name field must match the tool name exactly. All tools require a valid Bearer token — see the MCP overview for authentication details.

POST

orb_portfolio_health

Get health scores, trends, and alert counts for all sites in the portfolio.

Parameters

NameTypeRequiredDescriptionDefault
sort_by"health_score" | "name" | "traffic"optionalSort order for results.
filter_maturity"early" | "established"optionalFilter by site maturity stage.

Example request

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "orb_portfolio_health",
    "arguments": {
      "sort_by": "health_score"
    }
  }
}

Example result

json
{
  "content": [
    {
      "type": "text",
      "text": "{\"data\":[{\"id\":\"00000000-0000-0000-0000-000000000001\",\"name\":\"Acme Demo Co\",\"url\":\"https://acme-demo.example\",\"healthScore\":72,\"maturity\":\"established\",\"activeAlertCount\":1,\"trendDirection\":\"up\"}],\"_meta\":{\"generated_at\":\"2025-01-15T10:30:00.000Z\"}}"
    }
  ]
}
POST

orb_site_overview

Get detailed overview for a specific site: health score, KPIs, trend chart, and top pages.

Parameters

NameTypeRequiredDescriptionDefault
site_iduuidrequiredThe site UUID.
period"7d" | "28d" | "90d"optionalTime period for metrics.
response_format"concise" | "detailed"optionalResponse detail level.

Example request

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "orb_site_overview",
    "arguments": {
      "site_id": "00000000-0000-0000-0000-000000000001",
      "period": "28d",
      "response_format": "concise"
    }
  }
}

Example result

json
{
  "content": [
    {
      "type": "text",
      "text": "{\"data\":{\"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\"},\"_meta\":{\"generated_at\":\"2025-01-15T10:30:00.000Z\",\"site_id\":\"00000000-0000-0000-0000-000000000001\",\"site_url\":\"https://acme-demo.example\"}}"
    }
  ]
}
POST

orb_traffic_overview

Get traffic metrics: sessions, engagement rate, and top pages by traffic.

Parameters

NameTypeRequiredDescriptionDefault
site_iduuidrequiredThe site UUID.
period"7d" | "28d" | "90d"optionalTime period.

Example request

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "orb_traffic_overview",
    "arguments": {
      "site_id": "00000000-0000-0000-0000-000000000001",
      "period": "7d"
    }
  }
}

Example result

json
{
  "content": [
    {
      "type": "text",
      "text": "{\"data\":{\"sessions\":{\"value\":890,\"change\":\"+8.2%\",\"direction\":\"up\"},\"engagement_rate\":{\"value\":0.61,\"direction\":\"flat\"},\"topPages\":[{\"url\":\"https://acme-demo.example/blog/example-post\",\"organic_sessions_30d\":185}]},\"_meta\":{\"generated_at\":\"2025-01-15T10:30:00.000Z\",\"site_id\":\"00000000-0000-0000-0000-000000000001\",\"site_url\":\"https://acme-demo.example\"}}"
    }
  ]
}
POST

orb_cwv_status

Get Core Web Vitals status: LCP, INP/TBT, CLS with pass/fail, and PSI category scores.

Parameters

NameTypeRequiredDescriptionDefault
site_iduuidrequiredThe site UUID.

Example request

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "orb_cwv_status",
    "arguments": {
      "site_id": "00000000-0000-0000-0000-000000000001"
    }
  }
}

Example result

json
{
  "content": [
    {
      "type": "text",
      "text": "{\"data\":{\"cwv\":[{\"name\":\"LCP\",\"labValue\":1840,\"unit\":\"ms\",\"status\":\"good\"},{\"name\":\"TBT\",\"labValue\":120,\"unit\":\"ms\",\"status\":\"good\"},{\"name\":\"CLS\",\"labValue\":0.04,\"unit\":\"\",\"status\":\"good\"}],\"psiScores\":{\"performance\":91,\"accessibility\":88,\"bestPractices\":95,\"seo\":100},\"hasFieldData\":false},\"_meta\":{\"generated_at\":\"2025-01-15T10:30:00.000Z\",\"site_id\":\"00000000-0000-0000-0000-000000000001\"}}"
    }
  ]
}
POST

orb_alert_feed

Get alerts with type, severity, metric context, and affected URLs.

Parameters

NameTypeRequiredDescriptionDefault
site_iduuidoptionalFilter by site UUID.
severity"critical" | "warning" | "info"optionalFilter by severity.
limitinteger (1-100)optionalMax alerts to return.

Example request

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "orb_alert_feed",
    "arguments": {
      "severity": "critical",
      "limit": 5
    }
  }
}

Example result

json
{
  "content": [
    {
      "type": "text",
      "text": "{\"data\":[{\"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\"}],\"_meta\":{\"generated_at\":\"2025-01-15T10:30:00.000Z\"}}"
    }
  ]
}
POST

orb_index_coverage

Get index coverage: indexed/excluded/error counts and trend vs 7 days ago.

Parameters

NameTypeRequiredDescriptionDefault
site_iduuidrequiredThe site UUID.

Example request

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "orb_index_coverage",
    "arguments": {
      "site_id": "00000000-0000-0000-0000-000000000001"
    }
  }
}

Example result

json
{
  "content": [
    {
      "type": "text",
      "text": "{\"data\":{\"indexed\":142,\"excluded\":18,\"error\":3,\"unknown\":5,\"total\":168,\"indexed_7d_ago\":138,\"trend\":\"up\"},\"_meta\":{\"generated_at\":\"2025-01-15T10:30:00.000Z\",\"site_id\":\"00000000-0000-0000-0000-000000000001\"}}"
    }
  ]
}
POST

orb_compare_sites

Compare metrics across multiple sites side by side.

Parameters

NameTypeRequiredDescriptionDefault
site_idsuuid[] (2-10 items)requiredArray of site UUIDs to compare.
metric"health_score" | "traffic" | "cwv" | "impressions"requiredMetric to compare.

Example request

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "orb_compare_sites",
    "arguments": {
      "site_ids": [
        "00000000-0000-0000-0000-000000000001",
        "00000000-0000-0000-0000-000000000002"
      ],
      "metric": "health_score"
    }
  }
}

Example result

json
{
  "content": [
    {
      "type": "text",
      "text": "{\"data\":[{\"site_id\":\"00000000-0000-0000-0000-000000000001\",\"site_name\":\"Acme Demo Co\",\"site_url\":\"https://acme-demo.example\",\"metric_value\":72},{\"site_id\":\"00000000-0000-0000-0000-000000000002\",\"site_name\":\"Acme Marketing Blog\",\"site_url\":\"https://blog.acme-demo.example\",\"metric_value\":58}],\"_meta\":{\"generated_at\":\"2025-01-15T10:30:00.000Z\"}}"
    }
  ]
}
POST

orb_campaign_list

Get all campaigns for a site with click and session totals.

Parameters

NameTypeRequiredDescriptionDefault
site_iduuidrequiredThe site UUID.
status"draft" | "active" | "paused" | "completed"optionalFilter by campaign status.

Example request

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "orb_campaign_list",
    "arguments": {
      "site_id": "00000000-0000-0000-0000-000000000001",
      "status": "active"
    }
  }
}

Example result

json
{
  "content": [
    {
      "type": "text",
      "text": "{\"data\":[{\"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\"]}],\"_meta\":{\"generated_at\":\"2025-01-15T10:30:00.000Z\",\"site_id\":\"00000000-0000-0000-0000-000000000001\"}}"
    }
  ]
}
POST

orb_campaign_detail

Get campaign details with links, KPIs, and channel breakdown.

Parameters

NameTypeRequiredDescriptionDefault
site_iduuidrequiredThe site UUID.
campaign_iduuidrequiredThe campaign UUID.

Example request

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "orb_campaign_detail",
    "arguments": {
      "site_id": "00000000-0000-0000-0000-000000000001",
      "campaign_id": "00000000-0000-0000-0000-000000000010"
    }
  }
}

Example result

json
{
  "content": [
    {
      "type": "text",
      "text": "{\"data\":{\"campaign\":{\"id\":\"00000000-0000-0000-0000-000000000010\",\"name\":\"Acme Q1 Launch\",\"status\":\"active\"},\"kpis\":{\"clicks\":342,\"sessions\":187,\"engagement_rate\":0.61,\"conversions\":14},\"channel_breakdown\":[{\"channel\":\"email\",\"sessions\":112,\"clicks\":98},{\"channel\":\"social\",\"sessions\":75,\"clicks\":244}]},\"_meta\":{\"generated_at\":\"2025-01-15T10:30:00.000Z\",\"site_id\":\"00000000-0000-0000-0000-000000000001\"}}"
    }
  ]
}