Koskamo

MCP Analytics

A statistical analysis and reporting platform that allows AI assistants to upload CSV data or connect live sources like GA4 and Google Search Console. It generates interactive HTML reports using re-runnable R scripts, providing statistical testing, regression, machine learning, and business analytics capabilities with AI insights and PDF export.

Endpoint and access

OAuth sign-in: the first time you connect, your client opens the vendor's own authorization prompt in a browser.

MCP Analytics logo, by MCP AnalyticsVendor evidenceStreamable HTTPOAuth sign-inEndpoint checked 2026-11-07Operated by MCP Analytics
MCP endpoint (Streamable HTTP)
https://api.mcpanalytics.ai/mcp/api-key
Vendor documentation

What its tools do

27 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

27 of 27 have a description · 27 of 27 declare behavior hints · 15 of 27 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to mcpanalytics.ai ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Perform statistical tests like t-tests, ANOVA, and chi-square
  • Run regression models including Linear, Ridge, and Logistic
  • Execute machine learning tasks such as Random Forest and K-Means
  • Analyze business metrics like ROAS, churn prediction, and RFM segmentation

Source and maintenance

Vendor evidenceRegistry 1.0.8
Maintenance checked

Protocol and capabilities

Server
MCP Analytics 1.0.7
MCP protocol negotiated in check
2024-11-05
Tools
27 advertised
Resources
0 advertised
Resource templates
Sign-in required
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {},
  "resources": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

DISCOVERY MODE: no API key detected, so this connection can BROWSE but not RUN. You can call: tools/list (see what is available), ping. Every analysis tool will return 401 until a key is present. To actually run anything, the user needs a free API key: sign up at https://account.mcpanalytics.ai (it takes a minute, and a new account comes with free credits to start), then set it as the X-API-Key header (or MCP_API_KEY in the client config). Tell the user this up front rather than attempting a call and reporting an auth failure. WITHOUT A KEY you can still get one kind of answer now: call path_answer with objective and data (a small table pasted inline, up to 200 rows). It is a read of that table, nothing is stored; sign-in is asked when the user wants to save, re-run, or ask for more than a read.

Tools

27 advertised

account_link
Advertised by the server during the last successful anonymous check.
Advertised read-only

Direct link to the right account page for anything not doable in chat: billing, browser upload, report management. Hand the user the link and guide them.

account_link input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "section": {
      "enum": [
        "home",
        "billing",
        "upgrade",
        "create",
        "upload",
        "reports"
      ],
      "type": "string",
      "description": "Where to send the user"
    }
  }
}
account_link annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
about
Advertised by the server during the last successful anonymous check.
Advertised read-only

Platform documentation and info: how it works (Answer, Analytics, Custom Analytics), usage.

about input schema
{
  "type": "object",
  "required": [
    "topic"
  ],
  "properties": {
    "topic": {
      "type": "string",
      "description": "Topic: platform, manual, connectors, or a docs section"
    }
  }
}
about annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
agent_advisor
Advertised by the server during the last successful anonymous check.
Advertised read-only

AI help desk: which analysis fits your question, interpreting results, fixing errors. Multi-turn.

agent_advisor input schema
{
  "type": "object",
  "required": [
    "question"
  ],
  "properties": {
    "question": {
      "type": "string",
      "description": "Your question or request"
    }
  }
}
agent_advisor annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
datasets_upload
Advertised by the server during the last successful anonymous check.

Get your data in. Pass `data` as an array of row objects to create the dataset immediately and get a dataset_ref ready for path_resolver; omit it to get an upload link for a file only the user can reach. Add replace_ref (uuid://ID:KEY) with data to REFRESH an existing dataset in place; schedules and tools holding that reference read the new data on their next run.

datasets_upload input schema
{
  "type": "object",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "description": "Rows as an array of flat objects, creates the dataset in one call"
    },
    "expires_in": {
      "type": "integer",
      "default": 300,
      "description": "Token expiration in seconds"
    },
    "replace_ref": {
      "type": "string",
      "description": "uuid://ID:KEY of an existing dataset to overwrite in place with `data` (the push/refresh mode)"
    }
  }
}
datasets_upload annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
datasets_list
Advertised by the server during the last successful anonymous check.
Advertised read-only

List and search your uploaded datasets, with fuzzy matching on name, description, and tags. Returns each dataset's uuid:// reference (the `usage` field) for use as dataset_ref in path_resolver and path_tool_run. The id alone ('uuid://dsv2_...') also works for your own datasets and the platform sample; `dataset_key` may be null for the sample, which is normal.

datasets_list input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 20,
      "description": "Max results"
    },
    "search": {
      "type": "string",
      "description": "Search by name, description, or tags"
    }
  }
}
datasets_list annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
discover_tools
Advertised by the server during the last successful anonymous check.
Advertised read-only

Browse the analyses you can run: the ones you commissioned plus the platform Standard Library (prebuilt tools; each result tagged source:'own' or 'standard_library'). Plain-language match; no query lists everything, your own first. Nothing fits? Commission it with path_resolver.

discover_tools input schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Plain-language search over your library + the Standard Library; omit to list everything"
    }
  }
}
discover_tools annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
tools_schema
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get an analysis's parameter schema. ALWAYS call before path_tool_run.

tools_schema input schema
{
  "type": "object",
  "required": [
    "tool_name"
  ],
  "properties": {
    "tool_name": {
      "type": "string",
      "description": "Name of the analysis"
    }
  }
}
tools_schema annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
review_estimate
Advertised by the server during the last successful anonymous check.
Advertised read-only

The estimate as you review it WITH the user: the question as understood, the estimated answer (sample, marked), every place and its question, the page link, a review checklist. Before path_bespoke.

review_estimate input schema
{
  "type": "object",
  "required": [
    "estimate_id"
  ],
  "properties": {
    "estimate_id": {
      "type": "string"
    }
  }
}
review_estimate annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
adjust_estimate
Advertised by the server during the last successful anonymous check.

Apply the user's layout wishes to the estimate's page through the layout agent; a new named arrangement, nothing overwritten, no number changes.

adjust_estimate input schema
{
  "type": "object",
  "required": [
    "estimate_id",
    "instructions"
  ],
  "properties": {
    "estimate_id": {
      "type": "string"
    },
    "instructions": {
      "type": "string",
      "description": "What to change, in the user's words"
    }
  }
}
adjust_estimate annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
find_precedent
Advertised by the server during the last successful anonymous check.
Advertised read-only

Before estimating: how did we answer this objective before, on this data or any data? Prior packages and library runs with their tools, mappings, bespoke module names, method and verdicts. Platform-wide, read-only.

find_precedent input schema
{
  "type": "object",
  "required": [
    "objective"
  ],
  "properties": {
    "k": {
      "type": "integer",
      "default": 10
    },
    "objective": {
      "type": "string"
    },
    "dataset_ref": {
      "type": "string"
    }
  }
}
find_precedent annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
check_tool_fit
Advertised by the server during the last successful anonymous check.
Advertised read-only

Before naming a library tool: does it fit THIS dataset for THIS question? Column mapping, missing required inputs, method-fit verdict, the places it delivers. Read-only.

check_tool_fit input schema
{
  "type": "object",
  "required": [
    "tool_name",
    "dataset_ref"
  ],
  "properties": {
    "objective": {
      "type": "string"
    },
    "tool_name": {
      "type": "string"
    },
    "dataset_ref": {
      "type": "string"
    }
  }
}
check_tool_fit annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
package_status
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read an analytics package back: status, every run under it, the report link once delivered.

package_status input schema
{
  "type": "object",
  "required": [
    "package_id"
  ],
  "properties": {
    "package_id": {
      "type": "string"
    }
  }
}
package_status annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
my_objects
Advertised by the server during the last successful anonymous check.
Advertised read-only

List and search the objects you own across every question: the curated charts, tables and figures of each delivered package, grouped by objective.

my_objects input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 50
    },
    "query": {
      "type": "string"
    },
    "include_dropped": {
      "type": "boolean",
      "default": false
    }
  }
}
my_objects annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
build_status
Advertised by the server during the last successful anonymous check.
Advertised read-only

Check a commissioned build in-chat: stage progress, queue position, rejection reason if the data didn't match the objective, honest ETA, report link when delivered.

build_status input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "pipeline_id": {
      "type": "integer",
      "description": "pipeline_id from a build (modify_analysis)"
    },
    "track_token": {
      "type": "string",
      "description": "Token from the tracking URL"
    }
  }
}
build_status annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
ask_library
Advertised by the server during the last successful anonymous check.
Advertised read-only

Ask a question across all your delivered analyses: a synthesized answer with citations back to specific reports.

ask_library input schema
{
  "type": "object",
  "required": [
    "question"
  ],
  "properties": {
    "question": {
      "type": "string",
      "description": "Plain-language question to answer from your report library"
    }
  }
}
ask_library annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
reports_list
Advertised by the server during the last successful anonymous check.
Advertised read-only

Your report library: every analysis delivered, with status and links. Pass semantic_query to search report content in plain language.

reports_list input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "description": "Max results"
    },
    "semantic_query": {
      "type": "string",
      "description": "Natural-language search over your reports' content"
    }
  }
}
reports_list annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
warehouse
Advertised by the server during the last successful anonymous check.
Advertised read-only

Query your org's data warehouse free: browse the catalog (tables with column roles + computed metrics), semantically find data, plain-language ask, or named templates. Requires warehouse enablement (business plans).

warehouse input schema
{
  "type": "object",
  "required": [
    "action"
  ],
  "properties": {
    "query": {
      "type": "string"
    },
    "action": {
      "enum": [
        "ask",
        "query",
        "queries",
        "catalog",
        "find"
      ],
      "type": "string"
    },
    "params": {
      "type": "object"
    },
    "question": {
      "type": "string"
    }
  }
}
warehouse annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
schedules
Advertised by the server during the last successful anonymous check.
Advertised destructive

Standing re-runs of analyses you own: action='create' (weekly/monthly against a re-runnable data reference, connector:// or an https:// link; report emailed after each run), 'list', or 'cancel'.

schedules input schema
{
  "type": "object",
  "required": [
    "action"
  ],
  "properties": {
    "action": {
      "enum": [
        "create",
        "list",
        "cancel"
      ],
      "type": "string",
      "description": "What to do"
    },
    "cadence": {
      "enum": [
        "weekly",
        "monthly"
      ],
      "type": "string"
    },
    "tool_name": {
      "type": "string",
      "description": "create: the analysis to schedule"
    },
    "dataset_ref": {
      "type": "string",
      "description": "create: re-runnable reference (connector:// or https://)"
    },
    "schedule_id": {
      "type": "integer",
      "description": "cancel: from action='list'"
    },
    "column_mapping": {
      "type": "object"
    }
  }
}
schedules annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}
reports_view
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get a shareable browser link for a report, viewable without authentication.

reports_view input schema
{
  "type": "object",
  "required": [
    "processing_id"
  ],
  "properties": {
    "processing_id": {
      "type": "string",
      "description": "Processing ID from path_tool_run / reports_list"
    }
  }
}
reports_view annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
report_cards
Advertised by the server during the last successful anonymous check.
Advertised read-only

Browse a delivered report's individual cards (charts, tables, insights) inline in chat.

report_cards input schema
{
  "type": "object",
  "required": [
    "processing_id"
  ],
  "properties": {
    "processing_id": {
      "type": "string",
      "description": "The report's processing id, returned by path_tool_run or build_status"
    }
  }
}
report_cards annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
path_resolver
Advertised by the server during the last successful anonymous check.
Advertised read-only

Which path a question about data should take (reuse, rerun, answer, tool_run, estimate, bespoke, ask or none), with the reason, every path's score and time, and the ready input for the path it picks. Executes nothing and charges nothing.

path_resolver input schema
{
  "type": "object",
  "$defs": {
    "MetaEntry": {
      "type": "object",
      "title": "MetaEntry",
      "required": [
        "key"
      ],
      "properties": {
        "key": {
          "type": "string",
          "title": "Key",
          "pattern": "^[a-z0-9_.-]+$",
          "maxLength": 64,
          "minLength": 1
        },
        "note": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 200
            },
            {
              "type": "null"
            }
          ],
          "title": "Note",
          "default": null
        },
        "used": {
          "type": "boolean",
          "title": "Used",
          "default": true
        },
        "value": {
          "title": "Value",
          "default": null
        },
        "source": {
          "enum": [
            "stated",
            "derived"
          ],
          "type": "string",
          "title": "Source",
          "default": "stated"
        }
      },
      "description": "One piece of metadata about a question (LAT-3752; operator 2026-10-04: \"the metadata should be a list\"). The list\nis OPEN: any key is accepted. `source` says who said it: `stated` (the caller) or `derived` (the server looked it up).\nA caller can only ever produce `stated` entries; entitlement keys are read only from `derived` (meta.RESERVED).",
      "additionalProperties": false
    }
  },
  "title": "Question",
  "required": [
    "objective"
  ],
  "properties": {
    "door": {
      "enum": [
        "account",
        "mcp",
        "mailroom",
        "widget",
        "api",
        "internal"
      ],
      "type": "string",
      "title": "Door",
      "default": "api"
    },
    "meta": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/MetaEntry"
      },
      "title": "Meta",
      "maxItems": 32,
      "description": "open list of {key, value}; the caller's entries are always `stated`"
    },
    "objective": {
      "type": "string",
      "title": "Objective",
      "maxLength": 4000,
      "minLength": 3,
      "description": "the question, in the person's words"
    },
    "dataset_ref": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 512
        },
        {
          "type": "null"
        }
      ],
      "title": "Dataset Ref",
      "default": null,
      "description": "absent = no data yet (the resolver asks for it)"
    }
  },
  "description": "What arrives at path_resolver from any door, after the door's own adapter has normalised it.",
  "additionalProperties": false
}
path_resolver annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
path_reuse
Advertised by the server during the last successful anonymous check.
Advertised read-only

Hand back the report already delivered for this question on this data. Time: as path_resolver quotes.

path_reuse input schema
{
  "type": "object",
  "title": "ReuseInput",
  "required": [
    "objective",
    "dataset_ref"
  ],
  "properties": {
    "objective": {
      "type": "string",
      "title": "Objective",
      "maxLength": 4000,
      "minLength": 3,
      "description": "the question, in the person's words"
    },
    "dataset_ref": {
      "type": "string",
      "title": "Dataset Ref",
      "maxLength": 512,
      "minLength": 1,
      "description": "the dataset: the `usage` value from datasets_list (uuid://ID or uuid://ID:KEY), or its id, for a dataset the caller owns or the platform sample"
    },
    "resolution_id": {
      "type": "integer",
      "description": "The resolution_id from path_resolver's path_input. Pass path_input as given."
    }
  },
  "description": "Hand back a report already delivered on this data for this question. Re-checked at execution, never trusted\nfrom the suggestion: a report deleted or no longer the caller's is refused, not served.",
  "additionalProperties": false
}
path_reuse annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
path_rerun
Advertised by the server during the last successful anonymous check.

Run a delivered analysis again, on its own dataset or a new one: the same tools and mappings, no rebuild. package_id may also be the person's own report link (a /rpt/ link or its rpt_ token) or estimate id (est_); it reruns their newest delivered package for it. Time: as path_resolver quotes.

path_rerun input schema
{
  "type": "object",
  "title": "RerunInput",
  "required": [
    "package_id"
  ],
  "properties": {
    "package_id": {
      "type": "string",
      "title": "Package Id",
      "maxLength": 128,
      "minLength": 1,
      "description": "A delivered package's id, or the person's own report link (/rpt/ link or rpt_ token) or estimate id (est_). Someone else's link is not found."
    },
    "dataset_ref": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 512
        },
        {
          "type": "null"
        }
      ],
      "title": "Dataset Ref",
      "default": null,
      "description": "absent = the package's own dataset"
    },
    "resolution_id": {
      "type": "integer",
      "description": "The resolution_id from path_resolver's path_input. Pass path_input as given."
    }
  },
  "description": "Run a delivered package again, on its own dataset or a new one. Same tools, same mappings; no rebuild.",
  "additionalProperties": false
}
path_rerun annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
path_answer
Advertised by the server during the last successful anonymous check.
Advertised read-only

A read of the data (a total, an average, a count, the top group), computed on every row, in this response. When the question is not a read it says so and names the next step. Time: as path_resolver quotes. No key yet? Call it with objective and data (a small table, up to 200 rows): a read of that table comes back now, nothing stored. Sign-in is needed to save, re-run, or ask for more than a read.

path_answer input schema
{
  "type": "object",
  "title": "AnswerInput",
  "required": [
    "objective"
  ],
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "maxItems": 200,
      "description": "WITHOUT A KEY: up to 200 rows pasted inline as flat objects, e.g. [{\"month\":\"Jan\",\"sales\":120}]. Use instead of dataset_ref."
    },
    "objective": {
      "type": "string",
      "title": "Objective",
      "maxLength": 4000,
      "minLength": 3,
      "description": "the question, in the person's words"
    },
    "dataset_ref": {
      "type": "string",
      "title": "Dataset Ref",
      "maxLength": 512,
      "minLength": 1,
      "description": "the dataset: the `usage` value from datasets_list (uuid://ID or uuid://ID:KEY), or its id, for a dataset the caller owns or the platform sample"
    },
    "resolution_id": {
      "type": "integer",
      "description": "The resolution_id from path_resolver's path_input. Pass path_input as given."
    }
  },
  "description": "A read of the data computed on every row, in this response. Free. Abstains (immediate=false) when the question\nis not a read; it never guesses.",
  "additionalProperties": false
}
path_answer annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
path_tool_run
Advertised by the server during the last successful anonymous check.

Run one or more tested library tools on this dataset, with charts and a written report. No custom build. Time: as path_resolver quotes.

path_tool_run input schema
{
  "type": "object",
  "title": "ToolRunInput",
  "required": [
    "objective",
    "dataset_ref",
    "tool_names"
  ],
  "properties": {
    "objective": {
      "type": "string",
      "title": "Objective",
      "maxLength": 4000,
      "minLength": 3,
      "description": "the question, in the person's words"
    },
    "tool_names": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Tool Names",
      "maxItems": 8,
      "minItems": 1
    },
    "dataset_ref": {
      "type": "string",
      "title": "Dataset Ref",
      "maxLength": 512,
      "minLength": 1,
      "description": "the dataset: the `usage` value from datasets_list (uuid://ID or uuid://ID:KEY), or its id, for a dataset the caller owns or the platform sample"
    },
    "estimate_id": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 128
        },
        {
          "type": "null"
        }
      ],
      "title": "Estimate Id",
      "default": null
    },
    "resolution_id": {
      "type": "integer",
      "description": "The resolution_id from path_resolver's path_input. Pass path_input as given."
    },
    "column_mapping": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        {
          "type": "null"
        }
      ],
      "title": "Column Mapping",
      "default": null,
      "description": "dataset column for each input the tool needs; absent = suggested from the data"
    },
    "idempotency_key": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 128,
          "minLength": 8
        },
        {
          "type": "null"
        }
      ],
      "title": "Idempotency Key",
      "default": null,
      "description": "send one per run; a retry with the same key replays the first call instead of running it again"
    },
    "module_parameters": {
      "anyOf": [
        {
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "title": "Module Parameters",
      "default": null
    }
  },
  "description": "One or more tested library tools on this dataset. One tool runs directly; several run as a library-only package\n(no custom build: that is path_bespoke).",
  "additionalProperties": false
}
path_tool_run annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
path_estimate
Advertised by the server during the last successful anonymous check.

A rough answer over a sample and the layout of the full report, for the person to confirm before anything is ordered. Time: as path_resolver quotes.

path_estimate input schema
{
  "type": "object",
  "title": "EstimateInput",
  "required": [
    "objective",
    "dataset_ref"
  ],
  "properties": {
    "objective": {
      "type": "string",
      "title": "Objective",
      "maxLength": 4000,
      "minLength": 3,
      "description": "the question, in the person's words"
    },
    "tool_names": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxItems": 8
        },
        {
          "type": "null"
        }
      ],
      "title": "Tool Names",
      "default": null
    },
    "dataset_ref": {
      "type": "string",
      "title": "Dataset Ref",
      "maxLength": 512,
      "minLength": 1,
      "description": "the dataset: the `usage` value from datasets_list (uuid://ID or uuid://ID:KEY), or its id, for a dataset the caller owns or the platform sample"
    },
    "completeness": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Completeness",
      "default": null
    },
    "resolution_id": {
      "type": "integer",
      "description": "The resolution_id from path_resolver's path_input. Pass path_input as given."
    },
    "layout_objective": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 2000
        },
        {
          "type": "null"
        }
      ],
      "title": "Layout Objective",
      "default": null
    }
  },
  "description": "Free: a rough answer over a sample and the layout of the full report, for the person to confirm.",
  "additionalProperties": false
}
path_estimate annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
path_bespoke
Advertised by the server during the last successful anonymous check.

Order a custom analysis built for this data from a confirmed estimate, optionally with library tools alongside. Needs the person's yes and an idempotency key; a retry returns the first order. Time: as path_resolver quotes.

path_bespoke input schema
{
  "type": "object",
  "title": "BespokeInput",
  "required": [
    "estimate_id",
    "idempotency_key"
  ],
  "properties": {
    "tool_names": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxItems": 8
        },
        {
          "type": "null"
        }
      ],
      "title": "Tool Names",
      "default": null,
      "description": "library tools to run alongside the build"
    },
    "estimate_id": {
      "type": "string",
      "title": "Estimate Id",
      "maxLength": 128,
      "minLength": 1
    },
    "resolution_id": {
      "type": "integer",
      "description": "The resolution_id from path_resolver's path_input. Pass path_input as given."
    },
    "idempotency_key": {
      "type": "string",
      "title": "Idempotency Key",
      "maxLength": 128,
      "minLength": 8
    },
    "layout_objective": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 2000
        },
        {
          "type": "null"
        }
      ],
      "title": "Layout Objective",
      "default": null
    }
  },
  "description": "PAID. The order that includes a custom build, from a CONFIRMED estimate only. The idempotency key makes a retry\nor a double click replay the first order instead of placing a second (research: Stripe, IETF idempotency draft).",
  "additionalProperties": false
}
path_bespoke annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

0 advertised

No prompt definitions available.

Resources

0 advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
670 ms
95th percentile latency
670 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 670 ms · metadata changed · refuses unauthenticated resources/templates/list (HTTP 401)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http mcp-analytics https://api.mcpanalytics.ai/mcp/api-key

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add mcp-analytics --url https://api.mcpanalytics.ai/mcp/api-key

Cursor

Merge this server into .cursor/mcp.json in your project, then enable mcp-analytics in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "mcp-analytics": {
      "url": "https://api.mcpanalytics.ai/mcp/api-key"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "mcp-analytics": {
      "type": "streamableHttp",
      "url": "https://api.mcpanalytics.ai/mcp/api-key",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start mcp-analytics and inspect its tools.
VS Code configuration
{
  "servers": {
    "mcp-analytics": {
      "type": "http",
      "url": "https://api.mcpanalytics.ai/mcp/api-key"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http mcp-analytics https://api.mcpanalytics.ai/mcp/api-key

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://api.mcpanalytics.ai/mcp/api-key

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "mcp-analytics": {
      "serverUrl": "https://api.mcpanalytics.ai/mcp/api-key"
    }
  }
}

Let your agent find its tools

Find servers like MCP Analytics from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run MCP Analytics?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing