Skip to main content
The server exposes 10 tools and no resources or prompts. Every tool except aicmo_whoami (which takes no parameters at all) accepts an optional workspace parameter (a ai-cmo.dev workspace slug). When omitted, the server resolves the workspace from the credential or picks the sole accessible workspace; if multiple workspaces are available the tool returns an error asking you to choose.

aicmo_whoami

Title: ai-cmo.dev identity and workspaces
Description: List the workspaces accessible to this ai-cmo.dev credential and its authorized default.
Input parameters: None REST endpoint: GET /api/v1/workspaces
Scope: workspace:read
Example result:

aicmo_score

Title: ai-cmo.dev score
Description: Get the explainable GEO score for a workspace.
Input parameters: REST endpoint: GET /api/v1/workspaces/{workspace}/score[?date=]
Scope: metrics:read
Example result:

aicmo_scoreboard

Title: ai-cmo.dev scoreboard
Description: Get per-engine visibility metrics for a workspace.
Input parameters: REST endpoint: GET /api/v1/workspaces/{workspace}/scoreboard
Scope: metrics:read
Example result:

aicmo_recs_list

Title: List ai-cmo.dev recommendations
Description: List recommendations grouped by lifecycle status.
Input parameters: REST endpoint: GET /api/v1/workspaces/{workspace}/recs
Scope: recs:read
Example result:

aicmo_rec_update

Title: Update an ai-cmo.dev recommendation
Description: Apply a guarded recommendation lifecycle transition.
This is the only tool that mutates workspace records. (aicmo_ask also writes: it creates a thread and posts a message.) It uses optimistic-concurrency guards (expectedStatus + expectedVersion) to prevent conflicting updates.
Input parameters:
This MCP tool does not expose reviewEvidence, visibilitySnapshot, or draftId, even though the REST endpoint accepts them. Use the REST API directly if you need those fields.
REST endpoint: POST /api/v1/workspaces/{workspace}/recs/{id}/status
Scope: recs:write
Example result:

aicmo_runs_list

Title: List ai-cmo.dev runs
Description: List measurement runs for a workspace.
Input parameters: REST endpoint: GET /api/v1/workspaces/{workspace}/runs
Scope: runs:read
Example result:

aicmo_run_get

Title: Get an ai-cmo.dev run
Description: Get one workspace run job by ID.
Input parameters: REST endpoint: GET /api/v1/workspaces/{workspace}/runs/{id}
Scope: runs:read
Example result:

aicmo_reports_list

Title: List ai-cmo.dev reports
Description: List stable report identities for a workspace.
Input parameters: REST endpoint: GET /api/v1/workspaces/{workspace}/reports
Scope: reports:read
Example result:

aicmo_report_get

Title: Get an ai-cmo.dev report
Description: Get a report by stable report ID.
Input parameters: REST endpoint: GET /api/v1/workspaces/{workspace}/reports/{reportId}
Scope: reports:read
Example result:

aicmo_ask

Title: Ask ai-cmo.dev
Description: Ask the workspace assistant and return its streamed response as one result.
Input parameters: REST endpoint: POST /api/v1/chat (with thread creation via POST /api/v1/threads)
Scope: chat:write
Unlike the other tools, the result is not a passthrough of a REST response: the server consumes the chat SSE stream and folds every text-delta into one string, returning its own aggregated envelope. Example result: