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.
orb_portfolio_health
Get health scores, trends, and alert counts for all sites in the portfolio.
Parameters
| Name | Type | Required | Description | Default |
|---|---|---|---|---|
sort_by | "health_score" | "name" | "traffic" | optional | Sort order for results. | — |
filter_maturity | "early" | "established" | optional | Filter by site maturity stage. | — |
Example request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "orb_portfolio_health",
"arguments": {
"sort_by": "health_score"
}
}
}Example result
{
"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\"}}"
}
]
}orb_site_overview
Get detailed overview for a specific site: health score, KPIs, trend chart, and top pages.
Parameters
| Name | Type | Required | Description | Default |
|---|---|---|---|---|
site_id | uuid | required | The site UUID. | — |
period | "7d" | "28d" | "90d" | optional | Time period for metrics. | — |
response_format | "concise" | "detailed" | optional | Response detail level. | — |
Example request
{
"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
{
"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\"}}"
}
]
}orb_keyword_trends
Get top search queries with impressions, clicks, CTR, position, and period-over-period changes.
Parameters
| Name | Type | Required | Description | Default |
|---|---|---|---|---|
site_id | uuid | required | The site UUID. | — |
date_range | "7d" | "28d" | "90d" | optional | Time range for keyword data. | — |
limit | integer (1-100) | optional | Max results to return. | — |
query_filter | string | optional | Filter keywords containing this string. | — |
Example request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "orb_keyword_trends",
"arguments": {
"site_id": "00000000-0000-0000-0000-000000000001",
"date_range": "28d",
"limit": 10
}
}
}Example result
{
"content": [
{
"type": "text",
"text": "{\"data\":[{\"query\":\"example keyword\",\"impressions\":1240,\"clicks\":62,\"ctr\":0.05,\"position\":7.4}],\"_meta\":{\"generated_at\":\"2025-01-15T10:30:00.000Z\",\"site_id\":\"00000000-0000-0000-0000-000000000001\"}}"
}
]
}orb_traffic_overview
Get traffic metrics: sessions, engagement rate, and top pages by traffic.
Parameters
| Name | Type | Required | Description | Default |
|---|---|---|---|---|
site_id | uuid | required | The site UUID. | — |
period | "7d" | "28d" | "90d" | optional | Time period. | — |
Example request
{
"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
{
"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\"}}"
}
]
}orb_cwv_status
Get Core Web Vitals status: LCP, INP/TBT, CLS with pass/fail, and PSI category scores.
Parameters
| Name | Type | Required | Description | Default |
|---|---|---|---|---|
site_id | uuid | required | The site UUID. | — |
Example request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "orb_cwv_status",
"arguments": {
"site_id": "00000000-0000-0000-0000-000000000001"
}
}
}Example result
{
"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\"}}"
}
]
}orb_alert_feed
Get alerts with type, severity, metric context, and affected URLs.
Parameters
| Name | Type | Required | Description | Default |
|---|---|---|---|---|
site_id | uuid | optional | Filter by site UUID. | — |
severity | "critical" | "warning" | "info" | optional | Filter by severity. | — |
limit | integer (1-100) | optional | Max alerts to return. | — |
Example request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "orb_alert_feed",
"arguments": {
"severity": "critical",
"limit": 5
}
}
}Example result
{
"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\"}}"
}
]
}orb_index_coverage
Get index coverage: indexed/excluded/error counts and trend vs 7 days ago.
Parameters
| Name | Type | Required | Description | Default |
|---|---|---|---|---|
site_id | uuid | required | The site UUID. | — |
Example request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "orb_index_coverage",
"arguments": {
"site_id": "00000000-0000-0000-0000-000000000001"
}
}
}Example result
{
"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\"}}"
}
]
}orb_compare_sites
Compare metrics across multiple sites side by side.
Parameters
| Name | Type | Required | Description | Default |
|---|---|---|---|---|
site_ids | uuid[] (2-10 items) | required | Array of site UUIDs to compare. | — |
metric | "health_score" | "traffic" | "cwv" | "impressions" | required | Metric to compare. | — |
Example request
{
"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
{
"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\"}}"
}
]
}orb_campaign_list
Get all campaigns for a site with click and session totals.
Parameters
| Name | Type | Required | Description | Default |
|---|---|---|---|---|
site_id | uuid | required | The site UUID. | — |
status | "draft" | "active" | "paused" | "completed" | optional | Filter by campaign status. | — |
Example request
{
"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
{
"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\"}}"
}
]
}orb_campaign_detail
Get campaign details with links, KPIs, and channel breakdown.
Parameters
| Name | Type | Required | Description | Default |
|---|---|---|---|---|
site_id | uuid | required | The site UUID. | — |
campaign_id | uuid | required | The campaign UUID. | — |
Example request
{
"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
{
"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\"}}"
}
]
}