# Claimora

> Scientific and legal claim graph. Query claims, evidence, contradictions, and innovation flags.

- name: si.claimora/claimora
- version: 0.1.0
- connection class: R0 (autonomous)
- trust: 96/100
- quality: 64/100 (needs work)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/si.claimora%2Fclaimora
- tools: https://api.protogrid.dev/v1/servers/si.claimora%2Fclaimora/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "claimora": {
      "type": "http",
      "url": "https://claimora.si/mcp",
      "headers": {
        "X-Claimora-Paid-Token": "${X_CLAIMORA_PAID_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${X_CLAIMORA_PAID_TOKEN}`.

## Trust

- hygiene: 100
- liveness: 100
- freshness: 100
- provenance: 85
- drivers: +repository +dns-namespace +website +reachable +uptime-100% +updated-13d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 64/100 (needs work)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 64 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 3 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: query_claims (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_evidence (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_contradictions (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 3,983 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 25 (weight 15)

- warn `stability.changes`: 45 tool changes in 30 days
- fail `stability.rug_pull`: 8 tools kept their name but changed most of their description in 30 days; review before trusting them

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 7, about 3,983 tokens to load them all
- tool set hash: 391e2cee0ebf13c09b8ceda23ae7743d
- tools last changed: 2026-11-06T23:38:01.055Z
- badge: [![protogrid quality](https://protogrid.dev/badge/si.claimora/claimora.svg)](https://protogrid.dev/servers/si.claimora/claimora)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-11-06 `query_law` removed
  - 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).
- 2026-11-06 `search_smart` changed (description, outputSchema)
  - before: 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).
  - after: 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. A previously read source role is appended when one is known. 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).
- 2026-11-06 `get_updates` changed (outputSchema)
- 2026-11-06 `get_evidence` changed (description, outputSchema)
  - before: 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).
  - after: 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. A previously read source role is appended when one is known. 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).
- 2026-11-06 `query_claims` changed (description, outputSchema)
  - before: 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).
  - after: 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. A previously read source role is appended when one is known. 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).
- 2026-11-01 `query_law` changed (outputSchema)
- 2026-11-01 `search_smart` changed (outputSchema)
- 2026-11-01 `get_innovation_flags` changed (outputSchema)
- 2026-11-01 `get_updates` changed (outputSchema)
- 2026-11-01 `query_claims` changed (outputSchema)

Full history: https://api.protogrid.dev/v1/servers/si.claimora%2Fclaimora/changes

## Remotes

- https://claimora.si/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (7)

- `get_authors`: 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_contradictions`: 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_evidence`: 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. A previously read source role is appended when one is known.
    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_innovation_flags`: 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_updates`: 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).
    
- `query_claims`: 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. A previously read source role is appended when one is known.
    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).
    
- `search_smart`: 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. A previously read source role is appended when one is known.
    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).
    
