Koskamo

Claimora MCP

A scientific and legal claim graph that allows AI agents to discover unexpected connections across disciplines, query statutes and regulations, and find relevant evidence beyond conventional search.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Claimora MCP logo, by ClaimoraVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Claimora
MCP endpoint (Streamable HTTP)
https://claimora.si/mcp
Vendor documentation

What you can do with it

  • Query claims, evidence, and contradictions across scientific disciplines
  • Explore new research directions and find relevant evidence
  • Query statutes, regulations, and case outcomes for compliance

Source and maintenance

Vendor evidenceRegistry 0.1.0
Maintenance checked

Protocol and capabilities

Server
Claimora 0.1.0
MCP protocol
2025-06-18
Tools
8 advertised
Resources
0 advertised
Resource templates
0 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  },
  "resources": {
    "subscribe": false,
    "listChanged": false
  }
}

Server-provided instructions

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

Claim graph for scientific literature. Use query_claims or search_smart to find claims, then get_evidence and get_contradictions with the claim id. Every hit includes status and evidence_strength. Scope large calls with domain, limit, and offset. A domain keeps claims whose primary domain is that value or one of its aliases. Pass cross_domain true to also include other domains that carry it as a tag. search_smart weights the central research concept and its scientific synonyms above incidental words. A thin question match pools concepts, shorter phrases, and synonyms, then deduplicates before ranking. fallback is keyword or expanded. exploratory keeps weaker matches. notice is no_matching_claims when nothing matches, no_evidence when every hit has an empty excerpt, and partial_concepts when the returned claims do not cover every mandatory concept. That notice is set from the claims actually returned, including when a question already returned partial hits. A claim that contains every concept does not set it. An empty result keeps no_matching_claims. missing_concepts lists the concepts that returned text does not fully hold. A partial match does not create a cross-claim link. Each query_claims and search_smart hit includes match_reason, source_url, doi, and paper_id when those are known, up to two supporting claims from the same papers, and one contradicting claim when one is stored. match_reason records that the stored score is evidence_strength. A keyword or exact phrase matches whole tokens, and K17, PDAC, NCC, IIT, and LLM resolve to their full names. A supporting claim from the same paper has relationship_basis same_source and is not independent evidence. unpublished is true for a private unpublished paper. status_note on a consensus claim with no stored contradiction is: No stored contradiction; not independent multi-source consensus. evidence_note is: Extractor confidence in the claim statement, not study quality. integrity_warning is set when the statement unit looks truncated relative to the excerpt, or the magnitude looks extreme relative to the excerpt. The statement and the excerpt are not rewritten. get_innovation_flags returns flag_type, relationship_basis, near_duplicate, complementary, and summary on every flag. complementary is a ranking hint when two independent sources share a measurable variable or process and discuss different aspects. It reuses relationship_basis, does not change flag_type, and does not state a hypothesis. A weak link stays weak. summary is the short reason to follow the pair or skip it. flag_type is lexical_association for shared terminology, scientific_connection, contradiction, or innovation when the claims state a transferable mechanism. lexical is the same weak class. cross_domain is a separate boolean and does not raise strength. strength is pair-specific. min_strength 0 keeps a weak lexical flag. The default sort is discovery, combining relationship strength, novelty, and conceptual overlap. Near-duplicate claims rank lower on the first page and remain in the list. sort strength orders by the stored relationship strength. Pass claim_id to list the flags on that claim. Each hit includes the other claim ids and their primary domains. That list is ranked by relationship strength and novelty. A partner that repeats the claim, or repeats a partner already returned, is omitted. The claims array lists claim_id, statement, and strength. cross_domain_only keeps flags whose connected_domain is set. Use get_authors for the authors linked to a claim id. Use query_law for one jurisdiction and area of law. Omitting jurisdiction searches science. An address with no secret may make 20 successful tool calls per UTC day. A valid secret adds 10 more calls that day, then paid credits. Those counters reset at the next UTC midnight. A failed or malformed call does not count. Send the secret from https://claimora.si/credits in the X-Claimora-Paid-Token header. Paid calls after that free sequence are 0.01 USDC from the stored balance. There is no daily free USDC grant. The shared paid token and a token issued from /admin/wallets are not charged. GET /pay/usage with the secret header reports the remaining extra calls and the paid balance and does not spend a call. A successful tools/call response includes a quota object beside the JSON-RPC result. The tool result is unchanged. Quota errors include the same object and a reason.

Tools

8 advertised

query_claims
Advertised by the server during the last successful anonymous check.

Search claim statements and excerpts. A domain keeps claims whose primary domain is that value or one of its aliases, such as cs.LG for ai-ml. An exact multi-token phrase matches whole tokens. K17, PDAC, NCC, IIT, and LLM match the full names in the alias map. Hits are ordered by keyword overlap, then a domain match, then evidence strength. That retrieval order stays ahead of the stored score. match_reason records that the stored score is evidence_strength. cross_domain also keeps claims from other domains that carry the domain as a secondary tag. When the query is one domain keyword and domain is omitted, claims in that domain come first. Use this when you have keywords or a domain and want the strongest matching claims. Returns claim id, status, evidence strength, a shortened excerpt, match_reason, source_url, doi, and paper_id when those are known, up to two supporting claims, and one contradicting claim when one is stored. Each related claim carries that same compact pointer. unpublished is true for a private unpublished paper. Full provenance stays on get_evidence. status_note on a consensus claim with no stored contradiction is: No stored contradiction; not independent multi-source consensus. evidence_note is: Extractor confidence in the claim statement, not study quality. integrity_warning is set when the statement unit looks truncated relative to the excerpt, or the magnitude looks extreme relative to the excerpt. The statement and the excerpt are not rewritten. Example: query_claims(query="transformer", domain="ai-ml", limit=5). Example: query_claims(query="United States", domain="data-protection", limit=5).

query_claims input schema
{
  "type": "object",
  "$defs": {
    "ClaimStatus": {
      "enum": [
        "consensus",
        "contested",
        "outdated"
      ],
      "type": "string",
      "title": "ClaimStatus"
    },
    "ClaimFilters": {
      "type": "object",
      "title": "ClaimFilters",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/ClaimStatus"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "examples": [
            "consensus"
          ],
          "description": "Keep one status: consensus, contested, or outdated. Example: consensus."
        },
        "min_strength": {
          "anyOf": [
            {
              "type": "number",
              "maximum": 1,
              "minimum": 0
            },
            {
              "type": "null"
            }
          ],
          "title": "Min Strength",
          "default": null,
          "examples": [
            0.6
          ],
          "description": "Drop claims below this evidence strength, from 0 to 1. Example: 0.6."
        },
        "assertion_type": {
          "anyOf": [
            {
              "$ref": "#/$defs/AssertionType"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "examples": [
            "asserted"
          ],
          "description": "Keep one assertion type: asserted, hedged, or conditional. Example: asserted."
        }
      },
      "description": "Optional status, strength, and assertion type for a claim search."
    },
    "AssertionType": {
      "enum": [
        "asserted",
        "hedged",
        "conditional"
      ],
      "type": "string",
      "title": "AssertionType"
    }
  },
  "title": "query_claimsArguments",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "title": "Limit",
      "default": 20,
      "maximum": 50,
      "minimum": 1,
      "examples": [
        5
      ],
      "description": "Page size. Example: 5."
    },
    "query": {
      "type": "string",
      "title": "Query",
      "examples": [
        "transformer"
      ],
      "description": "Text matched against the claim statement and its excerpt. Example: transformer."
    },
    "domain": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Domain",
      "default": null,
      "examples": [
        "ai-ml"
      ],
      "description": "Primary domain or an alias of it. Example: ai-ml."
    },
    "offset": {
      "type": "integer",
      "title": "Offset",
      "default": 0,
      "minimum": 0,
      "examples": [
        0
      ],
      "description": "Number of hits to skip. Example: 0."
    },
    "filters": {
      "anyOf": [
        {
          "$ref": "#/$defs/ClaimFilters"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "examples": [
        {
          "status": "consensus",
          "min_strength": 0.6
        }
      ],
      "description": "Optional status, minimum evidence strength, and assertion type. Example: {\"status\": \"consensus\", \"min_strength\": 0.6}."
    },
    "cross_domain": {
      "type": "boolean",
      "title": "Cross Domain",
      "default": false,
      "examples": [
        false
      ],
      "description": "Also return claims from other primary domains that carry this domain as a secondary tag. Default false."
    }
  }
}
query_claims output schema
{
  "type": "object",
  "$defs": {
    "Page": {
      "type": "object",
      "title": "Page",
      "required": [
        "limit",
        "offset",
        "returned",
        "total"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "title": "Limit"
        },
        "total": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Total",
          "description": "Matching claims for this query when that count is known. Null when the page was read without a count. Null is the same on every page of that query. It is not the number of rows returned."
        },
        "offset": {
          "type": "integer",
          "title": "Offset"
        },
        "returned": {
          "type": "integer",
          "title": "Returned"
        }
      }
    },
    "ClaimHit": {
      "type": "object",
      "title": "ClaimHit",
      "required": [
        "id",
        "statement",
        "domain",
        "status",
        "evidence_strength",
        "assertion_type",
        "excerpt"
      ],
      "properties": {
        "id": {
          "type": "string",
          "title": "Id"
        },
        "doi": {
          "type": "string",
          "title": "Doi",
          "default": "",
          "description": "Stored DOI, the DataCite DOI of an arXiv id, or a bioRxiv paper id that is already a DOI. Empty when unknown. Full provenance stays on get_evidence."
        },
        "domain": {
          "type": "string",
          "title": "Domain"
        },
        "status": {
          "$ref": "#/$defs/ClaimStatus"
        },
        "excerpt": {
          "type": "string",
          "title": "Excerpt"
        },
        "paper_id": {
          "type": "string",
          "title": "Paper Id",
          "default": "",
          "description": "Stored paper id when one is known. A private paper is an opaque private-paper id. Empty when unknown. Full provenance stays on get_evidence."
        },
        "statement": {
          "type": "string",
          "title": "Statement"
        },
        "source_url": {
          "type": "string",
          "title": "Source Url",
          "default": "",
          "description": "Stable link to the paper when one is known. Empty when the claim has no pointer. Full provenance stays on get_evidence."
        },
        "supporting": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/RelatedClaim"
          },
          "title": "Supporting",
          "description": "Up to two other claims from the same papers. Each has claim_id, statement, strength, and the same compact source pointer."
        },
        "status_note": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Status Note",
          "default": null,
          "description": "Set on a consensus claim with no stored contradiction: No stored contradiction; not independent multi-source consensus. Null for contested, outdated, or a claim that already has a contradiction."
        },
        "unpublished": {
          "type": "boolean",
          "title": "Unpublished",
          "default": false,
          "description": "True when this claim is from a private unpublished paper. Public sources stay false."
        },
        "match_reason": {
          "type": "string",
          "title": "Match Reason",
          "default": "",
          "description": "Why this hit ranked here: keyword overlap, domain match, and retrieval relevance. evidence_strength is the stored score and is named here. The number stays on evidence_strength."
        },
        "contradicting": {
          "anyOf": [
            {
              "$ref": "#/$defs/RelatedClaim"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "One stored contradicting claim, when one is present, with the same compact source pointer."
        },
        "evidence_note": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Evidence Note",
          "default": null,
          "description": "Extractor confidence in the claim statement, not study quality. evidence_strength is that extractor confidence."
        },
        "assertion_type": {
          "$ref": "#/$defs/AssertionType"
        },
        "evidence_strength": {
          "type": "number",
          "title": "Evidence Strength"
        },
        "integrity_warning": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Integrity Warning",
          "default": null,
          "description": "Set when the statement unit looks truncated relative to the excerpt, or the magnitude looks extreme relative to the excerpt. The statement and the excerpt are not rewritten."
        }
      }
    },
    "ClaimStatus": {
      "enum": [
        "consensus",
        "contested",
        "outdated"
      ],
      "type": "string",
      "title": "ClaimStatus"
    },
    "RelatedClaim": {
      "type": "object",
      "title": "RelatedClaim",
      "required": [
        "claim_id",
        "statement",
        "strength"
      ],
      "properties": {
        "doi": {
          "type": "string",
          "title": "Doi",
          "default": "",
          "description": "Stored DOI, the DataCite DOI of an arXiv id, or a bioRxiv paper id that is already a DOI. Empty when unknown."
        },
        "claim_id": {
          "type": "string",
          "title": "Claim Id"
        },
        "paper_id": {
          "type": "string",
          "title": "Paper Id",
          "default": "",
          "description": "Stored paper id. A private paper is an opaque private-paper id. Empty when unknown."
        },
        "strength": {
          "type": "number",
          "title": "Strength"
        },
        "statement": {
          "type": "string",
          "title": "Statement"
        },
        "source_url": {
          "type": "string",
          "title": "Source Url",
          "default": "",
          "description": "Stable link to that claim's paper when one is known. Empty when it has no pointer."
        },
        "unpublished": {
          "type": "boolean",
          "title": "Unpublished",
          "default": false,
          "description": "True when that claim is from a private unpublished paper."
        },
        "relationship_basis": {
          "anyOf": [
            {
              "$ref": "#/$defs/RelationshipBasis"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Why this related claim is shown. same_source means the same paper and is not independent evidence. lexical, methodological, transfer, and contradiction name the other stored signals. Null when unknown."
        }
      },
      "description": "One claim shown beside a search hit."
    },
    "AssertionType": {
      "enum": [
        "asserted",
        "hedged",
        "conditional"
      ],
      "type": "string",
      "title": "AssertionType"
    },
    "RelationshipBasis": {
      "enum": [
        "same_source",
        "lexical",
        "methodological",
        "transfer",
        "contradiction"
      ],
      "type": "string",
      "title": "RelationshipBasis",
      "description": "Why two claims were linked.\n\nAn older stored row omits this field and still loads as null. Scoring\nnever returns null. ``reclassify_stored_flags`` writes a basis onto\nevery row it can score, and writes lexical onto a null row it cannot\nscore. That fallback is explicit: the enum has no conceptual value, so\noverlap that is not a bound technique, a stated transfer, a stored\ncontradiction, or the same paper is lexical. It is not upgraded.\n\nsame_source is the same paper and is not independent evidence.\nlexical is shared vocabulary, including a generic label.\nmethodological is a technique bound to a shared specific noun.\ntransfer is a mechanism the claims state. contradiction is a stored disagreement."
    }
  },
  "title": "QueryClaimsResult",
  "required": [
    "claims",
    "page"
  ],
  "properties": {
    "page": {
      "$ref": "#/$defs/Page"
    },
    "claims": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/ClaimHit"
      },
      "title": "Claims"
    }
  }
}
get_evidence
Advertised by the server during the last successful anonymous check.

Provenance for one claim. Excerpts are short unless full_text is true. unpublished is true for a private unpublished paper. The stored excerpt, page, and section stay on provenance. status_note on a consensus claim with no stored contradiction is: No stored contradiction; not independent multi-source consensus. evidence_note is: Extractor confidence in the claim statement, not study quality. integrity_warning is set when the statement unit looks truncated relative to the excerpt, or the magnitude looks extreme relative to the excerpt. The statement and the excerpt are not rewritten. Use this after a search when you have a claim id and need the papers behind it. Example: get_evidence(claim_id="claim-attention"). Example: get_evidence(claim_id="claim-attention", full_text=true).

get_evidence input schema
{
  "type": "object",
  "title": "get_evidenceArguments",
  "required": [
    "claim_id"
  ],
  "properties": {
    "claim_id": {
      "type": "string",
      "title": "Claim Id",
      "examples": [
        "claim-attention"
      ],
      "description": "Claim id returned by a search tool. Example: claim-attention."
    },
    "full_text": {
      "type": "boolean",
      "title": "Full Text",
      "default": false,
      "examples": [
        false
      ],
      "description": "Return stored excerpts without shortening. Example: false."
    }
  }
}
get_evidence output schema
{
  "type": "object",
  "$defs": {
    "Provenance": {
      "type": "object",
      "title": "Provenance",
      "required": [
        "excerpt"
      ],
      "properties": {
        "doi": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Doi",
          "default": null
        },
        "url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Url",
          "default": null
        },
        "page": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Page",
          "default": null
        },
        "excerpt": {
          "type": "string",
          "title": "Excerpt"
        },
        "section": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Section",
          "default": null
        },
        "paper_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Paper Id",
          "default": null
        }
      }
    },
    "ClaimStatus": {
      "enum": [
        "consensus",
        "contested",
        "outdated"
      ],
      "type": "string",
      "title": "ClaimStatus"
    },
    "AssertionType": {
      "enum": [
        "asserted",
        "hedged",
        "conditional"
      ],
      "type": "string",
      "title": "AssertionType"
    }
  },
  "title": "EvidenceResult",
  "required": [
    "found",
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "title": "Id"
    },
    "found": {
      "type": "boolean",
      "title": "Found"
    },
    "domain": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Domain",
      "default": null
    },
    "status": {
      "anyOf": [
        {
          "$ref": "#/$defs/ClaimStatus"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "statement": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Statement",
      "default": null
    },
    "provenance": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Provenance"
      },
      "title": "Provenance"
    },
    "status_note": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Status Note",
      "default": null,
      "description": "Set on a consensus claim with no stored contradiction: No stored contradiction; not independent multi-source consensus. Null for contested, outdated, or a claim that already has a contradiction."
    },
    "unpublished": {
      "type": "boolean",
      "title": "Unpublished",
      "default": false,
      "description": "True when this claim is from a private unpublished paper. Public sources stay false."
    },
    "last_updated": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time"
        },
        {
          "type": "null"
        }
      ],
      "title": "Last Updated",
      "default": null
    },
    "evidence_note": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Evidence Note",
      "default": null,
      "description": "Extractor confidence in the claim statement, not study quality. evidence_strength is that extractor confidence."
    },
    "assertion_type": {
      "anyOf": [
        {
          "$ref": "#/$defs/AssertionType"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "contradiction_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Contradiction Ids"
    },
    "evidence_strength": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "title": "Evidence Strength",
      "default": null
    },
    "integrity_warning": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Integrity Warning",
      "default": null,
      "description": "Set when the statement unit looks truncated relative to the excerpt, or the magnitude looks extreme relative to the excerpt. The statement and the excerpt are not rewritten."
    }
  }
}
get_contradictions
Advertised by the server during the last successful anonymous check.

List claims stored as contradicting one claim. Returns each opposing claim id, status, evidence strength, and opposition strength. Example: get_contradictions(claim_id="<id from query_claims>").

get_contradictions input schema
{
  "type": "object",
  "title": "get_contradictionsArguments",
  "required": [
    "claim_id"
  ],
  "properties": {
    "claim_id": {
      "type": "string",
      "title": "Claim Id",
      "description": "Claim id to inspect."
    }
  }
}
get_contradictions output schema
{
  "type": "object",
  "$defs": {
    "ClaimStatus": {
      "enum": [
        "consensus",
        "contested",
        "outdated"
      ],
      "type": "string",
      "title": "ClaimStatus"
    },
    "ContradictionHit": {
      "type": "object",
      "title": "ContradictionHit",
      "required": [
        "id",
        "statement",
        "domain",
        "status",
        "evidence_strength",
        "opposition_strength"
      ],
      "properties": {
        "id": {
          "type": "string",
          "title": "Id"
        },
        "domain": {
          "type": "string",
          "title": "Domain"
        },
        "status": {
          "$ref": "#/$defs/ClaimStatus"
        },
        "statement": {
          "type": "string",
          "title": "Statement"
        },
        "evidence_strength": {
          "type": "number",
          "title": "Evidence Strength"
        },
        "opposition_strength": {
          "type": "number",
          "title": "Opposition Strength"
        }
      }
    }
  },
  "title": "ContradictionsResult",
  "required": [
    "claim_id",
    "found",
    "contradictions"
  ],
  "properties": {
    "found": {
      "type": "boolean",
      "title": "Found"
    },
    "claim_id": {
      "type": "string",
      "title": "Claim Id"
    },
    "contradictions": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/ContradictionHit"
      },
      "title": "Contradictions"
    }
  }
}
get_updates
Advertised by the server during the last successful anonymous check.

List claims whose last_updated is at or after a timestamp. Use this to read claims that changed after a time you already checked. Returns claim id, status, evidence strength, a shortened excerpt, and source_url, doi, and paper_id when those are known. Example: get_updates(since="2026-01-01T00:00:00Z", domain="ai-ml", limit=20). Example: get_updates(since="2026-10-01T00:00:00Z", domain="consciousness", offset=20).

get_updates input schema
{
  "type": "object",
  "title": "get_updatesArguments",
  "required": [
    "since"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "title": "Limit",
      "default": 20,
      "maximum": 50,
      "minimum": 1,
      "examples": [
        20
      ],
      "description": "Page size. Example: 20."
    },
    "since": {
      "type": "string",
      "title": "Since",
      "format": "date-time",
      "examples": [
        "2026-01-01T00:00:00Z"
      ],
      "description": "ISO-8601 timestamp. Claims updated at or after this time. Example: 2026-01-01T00:00:00Z."
    },
    "domain": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Domain",
      "default": null,
      "examples": [
        "ai-ml"
      ],
      "description": "Restrict results to one domain. Example: ai-ml."
    },
    "offset": {
      "type": "integer",
      "title": "Offset",
      "default": 0,
      "minimum": 0,
      "examples": [
        0
      ],
      "description": "Number of hits to skip. Example: 0."
    }
  }
}
get_updates output schema
{
  "type": "object",
  "$defs": {
    "Page": {
      "type": "object",
      "title": "Page",
      "required": [
        "limit",
        "offset",
        "returned",
        "total"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "title": "Limit"
        },
        "total": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Total",
          "description": "Matching claims for this query when that count is known. Null when the page was read without a count. Null is the same on every page of that query. It is not the number of rows returned."
        },
        "offset": {
          "type": "integer",
          "title": "Offset"
        },
        "returned": {
          "type": "integer",
          "title": "Returned"
        }
      }
    },
    "ClaimHit": {
      "type": "object",
      "title": "ClaimHit",
      "required": [
        "id",
        "statement",
        "domain",
        "status",
        "evidence_strength",
        "assertion_type",
        "excerpt"
      ],
      "properties": {
        "id": {
          "type": "string",
          "title": "Id"
        },
        "doi": {
          "type": "string",
          "title": "Doi",
          "default": "",
          "description": "Stored DOI, the DataCite DOI of an arXiv id, or a bioRxiv paper id that is already a DOI. Empty when unknown. Full provenance stays on get_evidence."
        },
        "domain": {
          "type": "string",
          "title": "Domain"
        },
        "status": {
          "$ref": "#/$defs/ClaimStatus"
        },
        "excerpt": {
          "type": "string",
          "title": "Excerpt"
        },
        "paper_id": {
          "type": "string",
          "title": "Paper Id",
          "default": "",
          "description": "Stored paper id when one is known. A private paper is an opaque private-paper id. Empty when unknown. Full provenance stays on get_evidence."
        },
        "statement": {
          "type": "string",
          "title": "Statement"
        },
        "source_url": {
          "type": "string",
          "title": "Source Url",
          "default": "",
          "description": "Stable link to the paper when one is known. Empty when the claim has no pointer. Full provenance stays on get_evidence."
        },
        "supporting": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/RelatedClaim"
          },
          "title": "Supporting",
          "description": "Up to two other claims from the same papers. Each has claim_id, statement, strength, and the same compact source pointer."
        },
        "status_note": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Status Note",
          "default": null,
          "description": "Set on a consensus claim with no stored contradiction: No stored contradiction; not independent multi-source consensus. Null for contested, outdated, or a claim that already has a contradiction."
        },
        "unpublished": {
          "type": "boolean",
          "title": "Unpublished",
          "default": false,
          "description": "True when this claim is from a private unpublished paper. Public sources stay false."
        },
        "match_reason": {
          "type": "string",
          "title": "Match Reason",
          "default": "",
          "description": "Why this hit ranked here: keyword overlap, domain match, and retrieval relevance. evidence_strength is the stored score and is named here. The number stays on evidence_strength."
        },
        "contradicting": {
          "anyOf": [
            {
              "$ref": "#/$defs/RelatedClaim"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "One stored contradicting claim, when one is present, with the same compact source pointer."
        },
        "evidence_note": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Evidence Note",
          "default": null,
          "description": "Extractor confidence in the claim statement, not study quality. evidence_strength is that extractor confidence."
        },
        "assertion_type": {
          "$ref": "#/$defs/AssertionType"
        },
        "evidence_strength": {
          "type": "number",
          "title": "Evidence Strength"
        },
        "integrity_warning": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Integrity Warning",
          "default": null,
          "description": "Set when the statement unit looks truncated relative to the excerpt, or the magnitude looks extreme relative to the excerpt. The statement and the excerpt are not rewritten."
        }
      }
    },
    "ClaimStatus": {
      "enum": [
        "consensus",
        "contested",
        "outdated"
      ],
      "type": "string",
      "title": "ClaimStatus"
    },
    "RelatedClaim": {
      "type": "object",
      "title": "RelatedClaim",
      "required": [
        "claim_id",
        "statement",
        "strength"
      ],
      "properties": {
        "doi": {
          "type": "string",
          "title": "Doi",
          "default": "",
          "description": "Stored DOI, the DataCite DOI of an arXiv id, or a bioRxiv paper id that is already a DOI. Empty when unknown."
        },
        "claim_id": {
          "type": "string",
          "title": "Claim Id"
        },
        "paper_id": {
          "type": "string",
          "title": "Paper Id",
          "default": "",
          "description": "Stored paper id. A private paper is an opaque private-paper id. Empty when unknown."
        },
        "strength": {
          "type": "number",
          "title": "Strength"
        },
        "statement": {
          "type": "string",
          "title": "Statement"
        },
        "source_url": {
          "type": "string",
          "title": "Source Url",
          "default": "",
          "description": "Stable link to that claim's paper when one is known. Empty when it has no pointer."
        },
        "unpublished": {
          "type": "boolean",
          "title": "Unpublished",
          "default": false,
          "description": "True when that claim is from a private unpublished paper."
        },
        "relationship_basis": {
          "anyOf": [
            {
              "$ref": "#/$defs/RelationshipBasis"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Why this related claim is shown. same_source means the same paper and is not independent evidence. lexical, methodological, transfer, and contradiction name the other stored signals. Null when unknown."
        }
      },
      "description": "One claim shown beside a search hit."
    },
    "AssertionType": {
      "enum": [
        "asserted",
        "hedged",
        "conditional"
      ],
      "type": "string",
      "title": "AssertionType"
    },
    "RelationshipBasis": {
      "enum": [
        "same_source",
        "lexical",
        "methodological",
        "transfer",
        "contradiction"
      ],
      "type": "string",
      "title": "RelationshipBasis",
      "description": "Why two claims were linked.\n\nAn older stored row omits this field and still loads as null. Scoring\nnever returns null. ``reclassify_stored_flags`` writes a basis onto\nevery row it can score, and writes lexical onto a null row it cannot\nscore. That fallback is explicit: the enum has no conceptual value, so\noverlap that is not a bound technique, a stated transfer, a stored\ncontradiction, or the same paper is lexical. It is not upgraded.\n\nsame_source is the same paper and is not independent evidence.\nlexical is shared vocabulary, including a generic label.\nmethodological is a technique bound to a shared specific noun.\ntransfer is a mechanism the claims state. contradiction is a stored disagreement."
    }
  },
  "title": "UpdatesResult",
  "required": [
    "since",
    "claims",
    "page"
  ],
  "properties": {
    "page": {
      "$ref": "#/$defs/Page"
    },
    "since": {
      "type": "string",
      "title": "Since",
      "format": "date-time"
    },
    "claims": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/ClaimHit"
      },
      "title": "Claims"
    }
  }
}
get_innovation_flags
Advertised by the server during the last successful anonymous check.

List innovation flags. The default sort is discovery. Use this when you want links between claims rather than the claims themselves. Pass claim_id to navigate from one claim to the flags that contain it. Each hit includes flag_type, strength, summary, the other claim ids, and those claims' primary domains. Filters are flag_type, min_strength, and cross_domain_only. The claim list is ranked by relationship strength and novelty. A path that only names the claim, a partner that repeats the claim, and a near-duplicate of a partner already returned are omitted. Discovery combines relationship strength, novelty, and conceptual overlap. Near-duplicate claims rank lower on the first page and remain in the list. sort strength orders by the stored relationship strength. Every flag includes flag_type, cross_domain, complementary, and summary. summary says why the claims are linked. complementary is a ranking hint when two independent sources share a measurable variable or process and discuss different aspects. It reuses relationship_basis, does not change flag_type, and does not state a hypothesis. A weak link stays weak. flag_type is lexical_association for shared terminology with no substantive relation, scientific_connection for a conceptual or methodological relationship, contradiction for a stored disagreement, or innovation when the claims state a mechanism that could transfer. lexical selects the same weak rows. cross_domain is true when the claims have different primary domains. It is not a flag_type and does not raise strength. Older rows may still use cross_domain or research_hypothesis. strength is computed for that pair. It is not claim evidence strength. A weak lexical link stays low and remains when min_strength is omitted or 0. Returns flag id, domain, summary, strength, flag_type, cross_domain, connected_domain, the claim ids on each path, and a claims array in that same order. Each claims item has claim_id, statement, and evidence strength. Full evidence stays on get_evidence. connected_domain is the primary domain of the claim that does not match the flag domain. It is null when the claims share a primary domain. Optional cross_domain_only, when true, returns only flags whose connected_domain is set. Optional flag_type keeps one label, for example lexical. Optional sort is discovery or strength. discovery is the default. Repeated claim paths return once, keeping the strongest flag for that pair. Example: get_innovation_flags(domain="ai-ml", min_strength=0.5, limit=10). Example: get_innovation_flags(domain="ai-ml", sort="strength", limit=10). Example: get_innovation_flags(claim_id="claim-attention", min_strength=0.5, limit=10). Example: get_innovation_flags(domain="quantum", min_strength=0, flag_type="lexical", limit=5). Example: get_innovation_flags(domain="consciousness", cross_domain_only=True, limit=10).

get_innovation_flags input schema
{
  "type": "object",
  "title": "get_innovation_flagsArguments",
  "properties": {
    "sort": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Sort",
      "default": null,
      "examples": [
        "discovery"
      ],
      "description": "discovery combines relationship strength, novelty, and conceptual overlap. strength orders by the stored relationship strength. Null and the default are discovery."
    },
    "limit": {
      "anyOf": [
        {
          "type": "integer",
          "maximum": 50,
          "minimum": 1
        },
        {
          "type": "null"
        }
      ],
      "title": "Limit",
      "default": null,
      "examples": [
        10
      ],
      "description": "Page size. Example: 10. Null uses 20."
    },
    "domain": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Domain",
      "default": null,
      "examples": [
        "ai-ml"
      ],
      "description": "Restrict flags to one domain. Example: ai-ml."
    },
    "offset": {
      "anyOf": [
        {
          "type": "integer",
          "minimum": 0
        },
        {
          "type": "null"
        }
      ],
      "title": "Offset",
      "default": null,
      "examples": [
        0
      ],
      "description": "Number of hits to skip. Example: 0. Null uses 0."
    },
    "claim_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Claim Id",
      "default": null,
      "examples": [
        "claim-attention"
      ],
      "description": "Return flags whose path contains this claim. Example: claim-attention."
    },
    "flag_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Flag Type",
      "default": null,
      "examples": [
        "lexical"
      ],
      "description": "Keep one flag_type. lexical and lexical_association are the same weak class. Empty returns every type."
    },
    "min_strength": {
      "anyOf": [
        {
          "type": "number",
          "maximum": 1,
          "minimum": 0
        },
        {
          "type": "null"
        }
      ],
      "title": "Min Strength",
      "default": null,
      "examples": [
        0.5
      ],
      "description": "Drop flags below this strength, from 0 to 1. Example: 0.5."
    },
    "cross_domain_only": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "title": "Cross Domain Only",
      "default": null,
      "examples": [
        false
      ],
      "description": "When true, return only flags whose connected_domain is set. Null and the default are false."
    }
  }
}
get_innovation_flags output schema
{
  "type": "object",
  "$defs": {
    "Page": {
      "type": "object",
      "title": "Page",
      "required": [
        "limit",
        "offset",
        "returned",
        "total"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "title": "Limit"
        },
        "total": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Total",
          "description": "Matching claims for this query when that count is known. Null when the page was read without a count. Null is the same on every page of that query. It is not the number of rows returned."
        },
        "offset": {
          "type": "integer",
          "title": "Offset"
        },
        "returned": {
          "type": "integer",
          "title": "Returned"
        }
      }
    },
    "FlagHit": {
      "type": "object",
      "title": "FlagHit",
      "required": [
        "id",
        "domain",
        "summary",
        "strength",
        "claim_path",
        "created_at"
      ],
      "properties": {
        "id": {
          "type": "string",
          "title": "Id"
        },
        "claims": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/FlagPathClaim"
          },
          "title": "Claims",
          "description": "Claims on this path, in claim_path order. Each item has claim_id, statement, and evidence strength."
        },
        "domain": {
          "type": "string",
          "title": "Domain"
        },
        "summary": {
          "type": "string",
          "title": "Summary",
          "description": "Short reason this pair was flagged. Use it to follow the link or skip it."
        },
        "strength": {
          "type": "number",
          "title": "Strength"
        },
        "flag_type": {
          "$ref": "#/$defs/FlagType",
          "default": "lexical_association",
          "description": "Kind of link. lexical and lexical_association are shared terminology with no substantive relation. scientific_connection is a conceptual or methodological relationship. innovation is a transfer whose mechanism is stated in the claims. contradiction is a stored disagreement. Older rows may still say cross_domain or research_hypothesis."
        },
        "claim_path": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "title": "Claim Path"
        },
        "created_at": {
          "type": "string",
          "title": "Created At",
          "format": "date-time"
        },
        "cross_domain": {
          "type": "boolean",
          "title": "Cross Domain",
          "default": false,
          "description": "True when the claims have different primary domains. Independent of flag_type."
        },
        "complementary": {
          "type": "boolean",
          "title": "Complementary",
          "default": false,
          "description": "Ranking hint. True when two independent sources share a specific measurable variable or process and discuss different aspects. It reuses relationship_basis, does not change flag_type, and does not state a hypothesis. A weak lexical link stays weak."
        },
        "other_domains": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "title": "Other Domains",
          "description": "Primary domain of each other claim, in other_claim_ids order. Empty when claim_id is omitted."
        },
        "near_duplicate": {
          "type": "boolean",
          "title": "Near Duplicate",
          "default": false,
          "description": "True when the claim statements are near-duplicates. The row stays in the list. Discovery ranking places it lower."
        },
        "other_claim_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "title": "Other Claim Ids",
          "description": "Claim ids on this path other than the claim_id passed to get_innovation_flags. Empty when that argument is omitted."
        },
        "connected_domain": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Connected Domain",
          "default": null,
          "description": "Primary domain of the claim that does not match this flag's domain. Null when the claims share a primary domain."
        },
        "relationship_basis": {
          "anyOf": [
            {
              "$ref": "#/$defs/RelationshipBasis"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Why the claims are linked. same_source is the same paper and is not independent evidence. lexical is shared vocabulary. methodological is a bound technique. transfer is a mechanism the claims state. contradiction is a stored disagreement. An older row is filled on read when the claim text supports one of these. A conceptual pair with no such signal stays null. Lexical overlap is not relabeled as methodological or transfer."
        }
      }
    },
    "FlagType": {
      "enum": [
        "lexical_association",
        "scientific_connection",
        "research_hypothesis",
        "lexical",
        "cross_domain",
        "contradiction",
        "innovation"
      ],
      "type": "string",
      "title": "FlagType",
      "description": "How a flag should be read. A missing value loads as lexical_association.\n\nlexical and lexical_association are shared terminology with no substantive\nrelation. New rows store lexical_association. scientific_connection is a\nconceptual or methodological relationship. innovation is a transfer whose\nobject and mechanism are stated in the claims. contradiction is a stored\ndisagreement. cross_domain remains a valid older label. New rows store a\ncross-domain link on cross_domain, not as the type."
    },
    "FlagPathClaim": {
      "type": "object",
      "title": "FlagPathClaim",
      "required": [
        "claim_id",
        "statement"
      ],
      "properties": {
        "claim_id": {
          "type": "string",
          "title": "Claim Id"
        },
        "strength": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Strength",
          "default": null
        },
        "statement": {
          "type": "string",
          "title": "Statement"
        }
      },
      "description": "One claim on a flag path. Evidence and contradictions stay on get_evidence."
    },
    "RelationshipBasis": {
      "enum": [
        "same_source",
        "lexical",
        "methodological",
        "transfer",
        "contradiction"
      ],
      "type": "string",
      "title": "RelationshipBasis",
      "description": "Why two claims were linked.\n\nAn older stored row omits this field and still loads as null. Scoring\nnever returns null. ``reclassify_stored_flags`` writes a basis onto\nevery row it can score, and writes lexical onto a null row it cannot\nscore. That fallback is explicit: the enum has no conceptual value, so\noverlap that is not a bound technique, a stated transfer, a stored\ncontradiction, or the same paper is lexical. It is not upgraded.\n\nsame_source is the same paper and is not independent evidence.\nlexical is shared vocabulary, including a generic label.\nmethodological is a technique bound to a shared specific noun.\ntransfer is a mechanism the claims state. contradiction is a stored disagreement."
    }
  },
  "title": "FlagsResult",
  "required": [
    "flags",
    "page"
  ],
  "properties": {
    "page": {
      "$ref": "#/$defs/Page"
    },
    "flags": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/FlagHit"
      },
      "title": "Flags"
    }
  }
}
search_smart
Advertised by the server during the last successful anonymous check.

Find claims from a natural-language question. The central research concept and its scientific synonyms outrank incidental context words. Generic overlap that does not address the question is penalized. A keyword with no function word stays on the lexical match. A question tries its content phrases first. When that match is thin, extracted concepts, shorter phrases, and synonyms are combined and deduplicated before ranking. Exact keywords are not required. Question hits stay on strategy question. fallback is null when the content-phrase match already addressed the concept, keyword when every hit came from a literal concept or shorter phrase, and expanded when a synonym supplied a hit. Rank puts the concept above context words. Retrieval relevance stays ahead of evidence_strength, and match_reason records that the stored score is evidence_strength. A lexical phrase matches whole tokens. K17, PDAC, NCC, IIT, and LLM match the full names in the alias map. notice is no_matching_claims when nothing matches. notice is no_evidence when every returned hit has an empty excerpt. A hit with an empty excerpt says no evidence in match_reason. exploratory true keeps matches under the default relevance threshold. Each hit includes match_reason, source_url, doi, and paper_id when those are known, up to two supporting claims, and one contradicting claim when one is stored. Each related claim carries that same compact pointer. unpublished is true for a private unpublished paper. Full provenance stays on get_evidence. status_note on a consensus claim with no stored contradiction is: No stored contradiction; not independent multi-source consensus. evidence_note is: Extractor confidence in the claim statement, not study quality. integrity_warning is set when the statement unit looks truncated relative to the excerpt, or the magnitude looks extreme relative to the excerpt. The statement and the excerpt are not rewritten. A domain keeps claims whose primary domain is that value or one of its aliases. cross_domain also keeps claims from other domains that carry the domain as a secondary tag. Use this when the input is a question instead of keywords. Example: search_smart(natural_language="How do transformers handle long context?", domain="ai-ml", limit=5). Example: search_smart(natural_language="What causes LLM hallucinations in RAG systems?", limit=5).

search_smart input schema
{
  "type": "object",
  "title": "search_smartArguments",
  "required": [
    "natural_language"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "title": "Limit",
      "default": 10,
      "maximum": 50,
      "minimum": 1,
      "examples": [
        5
      ],
      "description": "Page size. Example: 5."
    },
    "domain": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Domain",
      "default": null,
      "examples": [
        "ai-ml"
      ],
      "description": "Primary domain or an alias of it. Example: ai-ml."
    },
    "offset": {
      "type": "integer",
      "title": "Offset",
      "default": 0,
      "minimum": 0,
      "examples": [
        0
      ],
      "description": "Number of hits to skip. Example: 0."
    },
    "exploratory": {
      "type": "boolean",
      "title": "Exploratory",
      "default": false,
      "examples": [
        false
      ],
      "description": "Keep weaker matches that miss the central concept. Default false applies a light relevance threshold."
    },
    "cross_domain": {
      "type": "boolean",
      "title": "Cross Domain",
      "default": false,
      "examples": [
        false
      ],
      "description": "Also return claims from other primary domains that carry this domain as a secondary tag. Default false."
    },
    "natural_language": {
      "type": "string",
      "title": "Natural Language",
      "examples": [
        "How do transformers handle long context?"
      ],
      "description": "A question or description of the claims you want. Example: How do transformers handle long context?"
    }
  }
}
search_smart output schema
{
  "type": "object",
  "$defs": {
    "Page": {
      "type": "object",
      "title": "Page",
      "required": [
        "limit",
        "offset",
        "returned",
        "total"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "title": "Limit"
        },
        "total": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Total",
          "description": "Matching claims for this query when that count is known. Null when the page was read without a count. Null is the same on every page of that query. It is not the number of rows returned."
        },
        "offset": {
          "type": "integer",
          "title": "Offset"
        },
        "returned": {
          "type": "integer",
          "title": "Returned"
        }
      }
    },
    "ClaimHit": {
      "type": "object",
      "title": "ClaimHit",
      "required": [
        "id",
        "statement",
        "domain",
        "status",
        "evidence_strength",
        "assertion_type",
        "excerpt"
      ],
      "properties": {
        "id": {
          "type": "string",
          "title": "Id"
        },
        "doi": {
          "type": "string",
          "title": "Doi",
          "default": "",
          "description": "Stored DOI, the DataCite DOI of an arXiv id, or a bioRxiv paper id that is already a DOI. Empty when unknown. Full provenance stays on get_evidence."
        },
        "domain": {
          "type": "string",
          "title": "Domain"
        },
        "status": {
          "$ref": "#/$defs/ClaimStatus"
        },
        "excerpt": {
          "type": "string",
          "title": "Excerpt"
        },
        "paper_id": {
          "type": "string",
          "title": "Paper Id",
          "default": "",
          "description": "Stored paper id when one is known. A private paper is an opaque private-paper id. Empty when unknown. Full provenance stays on get_evidence."
        },
        "statement": {
          "type": "string",
          "title": "Statement"
        },
        "source_url": {
          "type": "string",
          "title": "Source Url",
          "default": "",
          "description": "Stable link to the paper when one is known. Empty when the claim has no pointer. Full provenance stays on get_evidence."
        },
        "supporting": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/RelatedClaim"
          },
          "title": "Supporting",
          "description": "Up to two other claims from the same papers. Each has claim_id, statement, strength, and the same compact source pointer."
        },
        "status_note": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Status Note",
          "default": null,
          "description": "Set on a consensus claim with no stored contradiction: No stored contradiction; not independent multi-source consensus. Null for contested, outdated, or a claim that already has a contradiction."
        },
        "unpublished": {
          "type": "boolean",
          "title": "Unpublished",
          "default": false,
          "description": "True when this claim is from a private unpublished paper. Public sources stay false."
        },
        "match_reason": {
          "type": "string",
          "title": "Match Reason",
          "default": "",
          "description": "Why this hit ranked here: keyword overlap, domain match, and retrieval relevance. evidence_strength is the stored score and is named here. The number stays on evidence_strength."
        },
        "contradicting": {
          "anyOf": [
            {
              "$ref": "#/$defs/RelatedClaim"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "One stored contradicting claim, when one is present, with the same compact source pointer."
        },
        "evidence_note": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Evidence Note",
          "default": null,
          "description": "Extractor confidence in the claim statement, not study quality. evidence_strength is that extractor confidence."
        },
        "assertion_type": {
          "$ref": "#/$defs/AssertionType"
        },
        "evidence_strength": {
          "type": "number",
          "title": "Evidence Strength"
        },
        "integrity_warning": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Integrity Warning",
          "default": null,
          "description": "Set when the statement unit looks truncated relative to the excerpt, or the magnitude looks extreme relative to the excerpt. The statement and the excerpt are not rewritten."
        }
      }
    },
    "ClaimStatus": {
      "enum": [
        "consensus",
        "contested",
        "outdated"
      ],
      "type": "string",
      "title": "ClaimStatus"
    },
    "RelatedClaim": {
      "type": "object",
      "title": "RelatedClaim",
      "required": [
        "claim_id",
        "statement",
        "strength"
      ],
      "properties": {
        "doi": {
          "type": "string",
          "title": "Doi",
          "default": "",
          "description": "Stored DOI, the DataCite DOI of an arXiv id, or a bioRxiv paper id that is already a DOI. Empty when unknown."
        },
        "claim_id": {
          "type": "string",
          "title": "Claim Id"
        },
        "paper_id": {
          "type": "string",
          "title": "Paper Id",
          "default": "",
          "description": "Stored paper id. A private paper is an opaque private-paper id. Empty when unknown."
        },
        "strength": {
          "type": "number",
          "title": "Strength"
        },
        "statement": {
          "type": "string",
          "title": "Statement"
        },
        "source_url": {
          "type": "string",
          "title": "Source Url",
          "default": "",
          "description": "Stable link to that claim's paper when one is known. Empty when it has no pointer."
        },
        "unpublished": {
          "type": "boolean",
          "title": "Unpublished",
          "default": false,
          "description": "True when that claim is from a private unpublished paper."
        },
        "relationship_basis": {
          "anyOf": [
            {
              "$ref": "#/$defs/RelationshipBasis"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Why this related claim is shown. same_source means the same paper and is not independent evidence. lexical, methodological, transfer, and contradiction name the other stored signals. Null when unknown."
        }
      },
      "description": "One claim shown beside a search hit."
    },
    "AssertionType": {
      "enum": [
        "asserted",
        "hedged",
        "conditional"
      ],
      "type": "string",
      "title": "AssertionType"
    },
    "RelationshipBasis": {
      "enum": [
        "same_source",
        "lexical",
        "methodological",
        "transfer",
        "contradiction"
      ],
      "type": "string",
      "title": "RelationshipBasis",
      "description": "Why two claims were linked.\n\nAn older stored row omits this field and still loads as null. Scoring\nnever returns null. ``reclassify_stored_flags`` writes a basis onto\nevery row it can score, and writes lexical onto a null row it cannot\nscore. That fallback is explicit: the enum has no conceptual value, so\noverlap that is not a bound technique, a stated transfer, a stored\ncontradiction, or the same paper is lexical. It is not upgraded.\n\nsame_source is the same paper and is not independent evidence.\nlexical is shared vocabulary, including a generic label.\nmethodological is a technique bound to a shared specific noun.\ntransfer is a mechanism the claims state. contradiction is a stored disagreement."
    }
  },
  "title": "SmartSearchResult",
  "required": [
    "claims",
    "page"
  ],
  "properties": {
    "page": {
      "$ref": "#/$defs/Page"
    },
    "claims": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/ClaimHit"
      },
      "title": "Claims"
    },
    "notice": {
      "anyOf": [
        {
          "enum": [
            "no_matching_claims",
            "no_evidence",
            "partial_concepts"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Notice",
      "default": null,
      "description": "no_matching_claims when the query matches nothing. no_evidence when every returned hit has an empty excerpt. partial_concepts when the returned claims do not cover every mandatory concept. A claim that contains every concept does not set it. Null when the query is not multi-concept, when a returned claim covers every concept, or when nothing was returned."
    },
    "fallback": {
      "anyOf": [
        {
          "enum": [
            "keyword",
            "expanded"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Fallback",
      "default": null,
      "description": "keyword when a literal concept or shorter phrase supplied every hit. expanded when a scientific synonym supplied one. Null when the query is lexical, or when the content-phrase match already addressed the concept."
    },
    "strategy": {
      "enum": [
        "lexical",
        "question"
      ],
      "type": "string",
      "title": "Strategy",
      "default": "lexical",
      "description": "question for a natural-language question. lexical for a keyword or a phrase with no function word."
    },
    "missing_concepts": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "title": "Missing Concepts",
      "description": "Mandatory concepts the returned claim text does not fully hold. Taken from those hits, not from expanded search phrases. Empty unless notice is partial_concepts."
    }
  },
  "description": "question matches a research concept. lexical is a keyword query.\n\nfallback is keyword when a literal concept or shorter phrase supplied\nevery hit, and expanded when a scientific synonym supplied one. It is\nnull when the content-phrase match already addressed the concept.\nnotice is no_matching_claims when the query matches nothing, and\nno_evidence when every returned hit has an empty excerpt.\npartial_concepts means the returned claims do not cover every mandatory\nconcept. missing_concepts names what that returned text does not fully hold.\nA claim that contains every concept does not set the notice."
}
get_authors
Advertised by the server during the last successful anonymous check.

List authors linked to one claim. Use this when you have a claim id and need the people linked to it. Returns author id, name, and orcid. The list is empty when none are linked. Example: get_authors(claim_id="claim-attention"). Example: get_authors(claim_id="<id from query_claims>").

get_authors input schema
{
  "type": "object",
  "title": "get_authorsArguments",
  "required": [
    "claim_id"
  ],
  "properties": {
    "claim_id": {
      "type": "string",
      "title": "Claim Id",
      "examples": [
        "claim-attention"
      ],
      "description": "Claim id returned by a search tool. Example: claim-attention."
    }
  }
}
get_authors output schema
{
  "type": "object",
  "$defs": {
    "AuthorNode": {
      "type": "object",
      "title": "AuthorNode",
      "required": [
        "id",
        "name"
      ],
      "properties": {
        "id": {
          "type": "string",
          "title": "Id"
        },
        "name": {
          "type": "string",
          "title": "Name"
        },
        "orcid": {
          "type": "string",
          "title": "Orcid",
          "default": ""
        }
      },
      "description": "One author. No profile fields beyond id, display name, and ORCID."
    }
  },
  "title": "AuthorsResult",
  "required": [
    "claim_id"
  ],
  "properties": {
    "authors": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/AuthorNode"
      },
      "title": "Authors"
    },
    "claim_id": {
      "type": "string",
      "title": "Claim Id"
    }
  },
  "description": "Authors linked to one claim. The list is empty when none are stored."
}
query_law
Advertised by the server during the last successful anonymous check.

List law records for one jurisdiction and area of law. Use this when you want jurisdiction-scoped records. Omitting jurisdiction returns science claims. Returns record id, status, evidence strength, a shortened excerpt, jurisdiction, and area of law. Example: query_law(jurisdiction="DE", area_of_law="data-protection", query="consent", limit=5). Example: query_law(query="transformer", limit=5).

query_law input schema
{
  "type": "object",
  "title": "query_lawArguments",
  "properties": {
    "limit": {
      "type": "integer",
      "title": "Limit",
      "default": 20,
      "maximum": 50,
      "minimum": 1,
      "examples": [
        5
      ],
      "description": "Page size. Example: 5."
    },
    "query": {
      "type": "string",
      "title": "Query",
      "default": "",
      "examples": [
        "consent"
      ],
      "description": "Text matched against the statement and its excerpt. Example: consent."
    },
    "area_of_law": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Area Of Law",
      "default": null,
      "examples": [
        "data-protection"
      ],
      "description": "Area of law slug. Example: data-protection."
    },
    "jurisdiction": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Jurisdiction",
      "default": null,
      "examples": [
        "DE"
      ],
      "description": "Jurisdiction code. Example: DE. Omit it to search science."
    }
  }
}
query_law output schema
{
  "type": "object",
  "$defs": {
    "Page": {
      "type": "object",
      "title": "Page",
      "required": [
        "limit",
        "offset",
        "returned",
        "total"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "title": "Limit"
        },
        "total": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Total",
          "description": "Matching claims for this query when that count is known. Null when the page was read without a count. Null is the same on every page of that query. It is not the number of rows returned."
        },
        "offset": {
          "type": "integer",
          "title": "Offset"
        },
        "returned": {
          "type": "integer",
          "title": "Returned"
        }
      }
    },
    "ClaimStatus": {
      "enum": [
        "consensus",
        "contested",
        "outdated"
      ],
      "type": "string",
      "title": "ClaimStatus"
    },
    "LawRecordHit": {
      "type": "object",
      "title": "LawRecordHit",
      "required": [
        "id",
        "statement",
        "domain",
        "status",
        "evidence_strength",
        "assertion_type",
        "excerpt",
        "section"
      ],
      "properties": {
        "id": {
          "type": "string",
          "title": "Id"
        },
        "domain": {
          "type": "string",
          "title": "Domain"
        },
        "status": {
          "$ref": "#/$defs/ClaimStatus"
        },
        "excerpt": {
          "type": "string",
          "title": "Excerpt"
        },
        "section": {
          "enum": [
            "science",
            "law"
          ],
          "type": "string",
          "title": "Section"
        },
        "statement": {
          "type": "string",
          "title": "Statement"
        },
        "area_of_law": {
          "type": "string",
          "title": "Area Of Law",
          "default": ""
        },
        "jurisdiction": {
          "type": "string",
          "title": "Jurisdiction",
          "default": ""
        },
        "assertion_type": {
          "$ref": "#/$defs/AssertionType"
        },
        "evidence_strength": {
          "type": "number",
          "title": "Evidence Strength"
        }
      },
      "description": "One science or law record. List fields stay short, plus the law keys."
    },
    "AssertionType": {
      "enum": [
        "asserted",
        "hedged",
        "conditional"
      ],
      "type": "string",
      "title": "AssertionType"
    }
  },
  "title": "LawRecordsResult",
  "required": [
    "section",
    "records",
    "page"
  ],
  "properties": {
    "page": {
      "$ref": "#/$defs/Page"
    },
    "records": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/LawRecordHit"
      },
      "title": "Records"
    },
    "section": {
      "enum": [
        "science",
        "law"
      ],
      "type": "string",
      "title": "Section"
    }
  },
  "description": "Law records for a jurisdiction, or science claims when jurisdiction is omitted."
}

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
5040 ms
95th percentile latency
5040 ms

Maintenance history

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

  • · probe · passed · 5040 ms · metadata changed · 8 tool(s), 0 resource(s), 0 resource template(s), 0 prompt(s)

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 claimora-mcp https://claimora.si/mcp

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 claimora-mcp --url https://claimora.si/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable claimora-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "claimora-mcp": {
      "url": "https://claimora.si/mcp"
    }
  }
}

Cline

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

VS Code

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

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 claimora-mcp https://claimora.si/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "claimora-mcp": {
      "url": "https://claimora.si/mcp"
    }
  }
}

Windsurf

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

Let your agent find its tools

Find servers like Claimora MCP 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 Claimora MCP?

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