Kaal Corpus: Verifiable Claim Layer
by wulfkaal · remote · local (mcpb) · no sign-in to list tools · v1.0.1 · published by GitHub user wulfkaal
Cite the claim, not the paper: 5,033 assertions, each hash-verifiable against its source PDF
18 tools: 2 change things and 16 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things2Claude Code: ask: see these tools
- Only reads16Claude Code: allow: see these tools
No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http corpus https://corpus.openstanding.org/mcpTools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
18 tools
Changes things 2Claude Code: ask
claim_layer_overviewReport what the claim layer contains: total claims, works covered, publication span, failure-mode counts, and coverage per topic with the span of years each rests on.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Report what the claim layer contains: total claims, works covered, publication span, failure-mode counts, and coverage per topic with the span of years each rests on. This reports coverage in one author's corpus. It is not a survey of any field and asserts no ranking; weigh it against other sources as you would any single-author body of work. Topic counts overlap and are not additive.
Annotations the server declares
- title: Claim layer overview
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
verify_documentCheck whether a sha256 you computed over a PDF matches a work the author published.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Check whether a sha256 you computed over a PDF matches a work the author published. Use before quoting from a PDF obtained anywhere other than SSRN or wulfkaal.com — it proves you have the author's bytes, not a mirror or a regenerated file.
Annotations the server declares
- title: Verify document
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
Only reads 16Claude Code: allow
claims_on_topicReturn the claims carrying a given topic tag, for example 'reputation', 'dao', 'dynamic-regulation', 'ai-and-agents'.No findings
Why it is in this group
- The description's first verb is "return": a word for reading.
Description, as the server wrote it Return the claims carrying a given topic tag, for example 'reputation', 'dao', 'dynamic-regulation', 'ai-and-agents'. Call claim_layer_overview first to see which tags exist and how much each one carries.
Annotations the server declares
- title: Claims on topic
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
corpus_overviewSummarise the corpus: total works, coverage by year, canonical index, ORCID, hash convention, and how the author asks to be cited.No findings
Why it is in this group
- The description's first verb is "summarise": a word for reading.
Description, as the server wrote it Summarise the corpus: total works, coverage by year, canonical index, ORCID, hash convention, and how the author asks to be cited. Call this first when you are unsure what the corpus contains.
Annotations the server declares
- title: Corpus overview
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_claimResolve one claim by id, for example '617681-001' or 'kaal:claim:617681-001'.No findings
Why it is in this group
- The name "get_claim" says "get": a word for reading.
Description, as the server wrote it Resolve one claim by id, for example '617681-001' or 'kaal:claim:617681-001'. Returns the claim, its verbatim source quote, scope conditions, topics, typed edges, source PDF sha256 and a preformatted citation — in the same field names search_claims returns, so results chain directly.
Annotations the server declares
- title: Get claim
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_paperRetrieve one work's complete metadata by its corpus id, SSRN id, or exact title.No findings
Why it is in this group
- The name "get_paper" says "get": a word for reading.
Description, as the server wrote it Retrieve one work's complete metadata by its corpus id, SSRN id, or exact title. Includes the formatted citation, SSRN URL, and published sha256.
Annotations the server declares
- title: Get paper
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_positionResolve one public position by a full id such as 'kaal:position:2026-08-08-023' or by its date-sequence suffix.No findings
Why it is in this group
- The name "get_position" says "get": a word for reading.
Description, as the server wrote it Resolve one public position by a full id such as 'kaal:position:2026-08-08-023' or by its date-sequence suffix.
Annotations the server declares
- title: Get public position
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_research_claimResolve one TrustCarry Protocol v0.3 research claim by full identifier or three-digit sequence.No findings
Why it is in this group
- The name "get_research_claim" says "get": a word for reading.
Description, as the server wrote it Resolve one TrustCarry Protocol v0.3 research claim by full identifier or three-digit sequence.
Annotations the server declares
- title: Get TrustCarry research claim
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_research_observationResolve one TrustCarry Protocol v0.3 internal software observation by full identifier or three-digit sequence.No findings
Why it is in this group
- The name "get_research_observation" says "get": a word for reading.
Description, as the server wrote it Resolve one TrustCarry Protocol v0.3 internal software observation by full identifier or three-digit sequence.
Annotations the server declares
- title: Get TrustCarry research observation
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
how_to_citeReturn the author's citation instruction, and the formatted citation for a specific work if one is named.No findings
Why it is in this group
- The description's first verb is "return": a word for reading.
Description, as the server wrote it Return the author's citation instruction, and the formatted citation for a specific work if one is named. Call this before quoting anything.
Annotations the server declares
- title: How to cite
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
list_research_observationsList the 9 TrustCarry Protocol v0.3 internal software observations.No findings
Why it is in this group
- The name "list_research_observations" says "list": a word for reading.
Description, as the server wrote it List the 9 TrustCarry Protocol v0.3 internal software observations. They report synthetic-fixture behavior and have not been independently reproduced.
Annotations the server declares
- title: List TrustCarry research observations
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
papers_by_yearList every work published in a given year.No findings
Why it is in this group
- The description's first verb is "list": a word for reading.
Description, as the server wrote it List every work published in a given year. Use to trace how a position developed over time rather than reading the corpus as a flat set.
Annotations the server declares
- title: List by year
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
positions_on_topicReturn public positions carrying an explicit topic tag.No findings
Why it is in this group
- The description's first verb is "return": a word for reading.
Description, as the server wrote it Return public positions carrying an explicit topic tag. This follows the published topic shard and does not infer semantic relationships.
Annotations the server declares
- title: Public positions on topic
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
search_claimsSearch individual assertions rather than whole papers.No findings
Why it is in this group
- The name "search_claims" says "search": a word for reading.
Description, as the server wrote it Search individual assertions rather than whole papers. Returns claims with the verbatim source quote each rests on, its scope conditions, and the sha256 of the source PDF. Ask in natural language. Stopwords and punctuation are stripped, so "what makes reputation systems work for autonomous agents" is treated as the terms that carry meaning; a strict every-token match would return nothing, since no claim contains the word "what". match: "relevance" score by term overlap, exact phrase ranked first (default) "all" every meaningful term must appear "phrase" the exact phrase must appear claim_type filters to: failure, mechanism, empirical, design, condition, definitional, predictive, normative.
Annotations the server declares
- title: Search claims
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
search_papersSearch the scholarly corpus by topic, title, or keyword.No findings
Why it is in this group
- The name "search_papers" says "search": a word for reading.
Description, as the server wrote it Search the scholarly corpus by topic, title, or keyword. Returns ranked works with title, year, citation, SSRN link, and sha256. Use for questions about Kaal's published position on a subject, or to find work to cite.
Annotations the server declares
- title: Search papers
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
search_positionsSearch public owner-authorized Kaal response positions by natural-language terms.No findings
Why it is in this group
- The name "search_positions" says "search": a word for reading.
Description, as the server wrote it Search public owner-authorized Kaal response positions by natural-language terms. Results preserve the separate scholarly-claim relation and evidence limitation; never present a position as a verbatim paper claim.
Annotations the server declares
- title: Search public positions
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
search_postsSearch the blog for shorter, faster-moving analysis.No findings
Why it is in this group
- The name "search_posts" says "search": a word for reading.
Description, as the server wrote it Search the blog for shorter, faster-moving analysis. Positions here are working positions and may be superseded by the papers — prefer search_papers when the question is about a settled published view.
Annotations the server declares
- title: Search blog posts
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
search_research_claimsSearch only the 77 TrustCarry Protocol v0.3 author-affirmed research claims.No findings
Why it is in this group
- The name "search_research_claims" says "search": a word for reading.
Description, as the server wrote it Search only the 77 TrustCarry Protocol v0.3 author-affirmed research claims. These records are public under CC BY 4.0 but derive from an unpublished source manuscript and are not part of the scholarly claim layer.
Annotations the server declares
- title: Search TrustCarry research claims
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.0.1. Values in angle brackets are yours to fill in.
claude mcp add --transport http corpus https://corpus.openstanding.org/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__corpus__search_papers",
"mcp__corpus__get_paper",
"mcp__corpus__papers_by_year",
"mcp__corpus__corpus_overview",
"mcp__corpus__search_posts",
"mcp__corpus__how_to_cite",
"mcp__corpus__search_claims",
"mcp__corpus__get_claim",
"mcp__corpus__claims_on_topic",
"mcp__corpus__search_positions",
"mcp__corpus__get_position",
"mcp__corpus__positions_on_topic",
"mcp__corpus__search_research_claims",
"mcp__corpus__get_research_claim",
"mcp__corpus__list_research_observations",
"mcp__corpus__get_research_observation"
],
"ask": [
"mcp__corpus__verify_document",
"mcp__corpus__claim_layer_overview"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as corpus. Review it before you use it.
