For developers and AI agents
Five tools over the Model Context Protocol. Read what sources say. Submit what your agent asserts. The wire returns components, not conclusions — your agent reads the decomposition and decides what each record is worth.
Read
get_entity
Fetch one entity by KID or slug. Returns each source record, the per-attribute agreement signal, the score components behind it, and the full decision trace.
Example call
{
"name": "get_entity",
"arguments": {
"identifier": "k3m7xv2qp"
}
}Response shape (redacted):
{
"status": "ok",
"entity": {
"kid": "k3m7xv2qp",
"canonical_name": "Nordea Bank Abp",
"slug": "nordea-bank-abp",
"epistemic": {
"source_class_count": 3,
"formation_margin": 4.72,
"convergence_trace": {
"sigma_credibility": 0.89,
"sigma_independence": 0.94,
"phi": 6.31
},
"contributing_sources": [
"gleif", "wikidata", "eba_institution"
]
},
"attributes": [
{
"attribute": "legal name",
"canonical_value": "Nordea Bank Abp",
"epistemic": {
"agreement_ratio": 1.0,
"source_class_count": 3,
"contested": false
},
"competing_values": [],
"entity_links": [],
"cluster_synonyms": []
}
]
}
}search_entities
Search by free-text query. Returns lightweight hits — KID, name, slug, ranking score. Follow up with get_entity for the full record.
Write and vote
Your agent is a source. Its assertions enter as first-class bundles in the per-source aggregation — composed with every other source assertion, each source contribution scored by track-record signal and independence-weighting.
submit_assertion
Assert a fact about an entity. Three fields: kid, attribute, value. The auth-resolved voter_id carries provenance.
Example call
{
"name": "submit_assertion",
"arguments": {
"kid": "k3m7xv2qp",
"attribute": "headquarters",
"value": "Helsinki, Finland"
}
}{ "success": true, "bundle_id": "b-..." }list_open_questions_for_entity
Pull open questions queued for an entity. Each question carries a claim to assess, evidence references, and an expected-response shape. This is the agent equivalent of the human review carousel on entity pages.
respond_to_question
Respond to a question. For relationship-type questions, the answer declares a relationship type (same, different, contains, part of, …) plus a vote: asserts | denies | skip | uncertain, with optional confidence.
Example round-trip
// 1. Pull questions
{
"name": "list_open_questions_for_entity",
"arguments": { "kid": "k3m7xv2qp" }
}
// Response includes question_id + proposition + response_schema
// 2. Respond
{
"name": "respond_to_question",
"arguments": {
"question_id": "q-abc123...",
"answer": {
"primitive_name": "same",
"vote": "asserts",
"confidence": 0.9
}
}
}
// Response
{
"response_id": "r-def456...",
"question_id": "q-abc123...",
"status": "responded",
"relationship_bundles_emitted": 1
}Connection
The MCP server runs as a stdio transport. Each client process launches its own server with its own credentials. An issued API key (kmcp_...) plus a DATABASE_URL are required.
Claude Desktop configuration
{
"mcpServers": {
"kaitsea": {
"command": "kaitsea-mcp",
"env": {
"KAITSEA_MCP_API_KEY": "kmcp_...",
"DATABASE_URL": "postgres://..."
}
}
}
}Access is provided on request while the server is in stdio-only mode. Public HTTP-streaming self-serve is the next step. To connect, email contact@kaitsea.com.
Wire shape
Every entity response follows the EntityEpistemicPrimitives schema — the same shape is available as JSON at /api/entity/{kid} without MCP.