Koskamo

vera.ink MCP

The vera.ink MCP server allows AI assistants to check documents against legal, standard, or policy rules. It verifies compliance by citing exact clauses and source text, answers questions based on specific rule packs, and enables users to build new compliance packs for various jurisdictions.

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.

vera.ink MCP logo, by iWantIt (Pty) LtdVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by iWantIt (Pty) Ltd
You need:Sign in and create one on the API keys pagePlans start at $19 a month for 250 credits
MCP endpoint (Streamable HTTP)
https://vera-mcp-production.up.railway.app/mcp
Vendor documentation

What its tools do

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

7 of 7 have a description · 7 of 7 declare behavior hints · 6 of 6 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to vera.ink ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Check a document against a pack of rules
  • Ask a pack a question for matching rules
  • Build a new compliance pack

Source and maintenance

Vendor evidenceRegistry 1.2.1

Protocol and capabilities

Server
vera-mcp 1.2.1
MCP protocol negotiated in check
2025-11-25
Tools
7 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

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

Use Vera as an evidence layer, not as a source of uncited guesses. 1. Call list_packs before choosing a pack. Select from available_packs and only use a pack whose readiness.query_ready is true. 2. If no relevant query-ready pack exists, do not invent a pack_id and do not run query_pack or verify_document. Propose a concise finite pack plan: name, intended check, authoritative source types, jurisdiction, and version/date requirements. Ask whether the user wants Vera to build it. 3. Never call start_pack_build until the user explicitly approves a specific max_credits integer for that exact pack plan. Explain that it is a hard ceiling, not an estimate or guaranteed charge; work can stop earlier. At current pricing a cap below 28 may pause before one planning/discovery/extraction cycle completes. Do not infer approval from a general request to check a document. 4. start_pack_build requires exactly one of pack_id or new_pack and a unique idempotency_key. Reuse that key only for an exact retry. Poll get_pack_build_status using poll_after_ms only while active=true. Stop when terminal=true or requires_action=true. If your execution window ends, report job_id and resume status polling later; never restart the build merely because polling was interrupted. 5. Read readiness_summary literally: usable_now means the pack can be queried; minimum_coverage_ready means each measured section has at least one locked rule; build_finished means this funded job completed. To claim fully_strengthened, call get_pack_coverage and require readiness.fully_strengthened=true. Never use fully_ready, build_finished, or another signal as a substitute. 6. When requires_action=true, present available_actions without implying that more spending is required. A usable budget-paused pack offers exactly two choices: use_pack now, or start_new_job_with_additional_budget after explicit approval. Never spend automatically. 7. When a build completes with next_action=use_pack, use its pack_id directly or call list_packs again, then continue the user's original task. Clearly explain any budget, credit, or source requirement without claiming unfinished work is complete. 8. For high-stakes work, call get_pack_coverage before relying on a pack. Disclose incomplete coverage or stale sources. 9. Use query_pack to retrieve exact locked rules before drafting. Keep Vera's verified quote and citation distinct from your own inference. 10. verify_document requires an idempotency_key. Reuse the same key only for an exact retry; use a new key whenever the pack, document, or mode changes. Poll get_verification_status using poll_after_ms until terminal is true. 11. Never describe a verification as clean unless the terminal response says verdict=clean, coverage_complete=true, and result_consistent=true. Follow next_action for every other verdict.

Tools

7 advertised

query_pack — Query a Vera pack
Advertised by the server during the last successful anonymous check.
Open-world

Retrieve the best matching locked rules and exact evidence from a query-ready Vera pack. This costs credits. Preserve each verified quote and citation, distinguish them from your inference, and treat coverage=none as no answer.

query_pack input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "pack_id",
    "question"
  ],
  "properties": {
    "pack_id": {
      "type": "string",
      "format": "uuid",
      "description": "The Vera pack ID (from list_packs)"
    },
    "question": {
      "type": "string",
      "maxLength": 2000,
      "minLength": 3,
      "description": "The question to ask"
    }
  },
  "additionalProperties": false
}
query_pack output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {},
  "additionalProperties": true
}
query_pack annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
verify_document — Verify a document against a Vera pack
Advertised by the server during the last successful anonymous check.
Open-world

Start a paid, asynchronous check against a query-ready pack. Use one unique idempotency_key and reuse it only for an exact retry. Omit mode to use the pack's mode. Poll get_verification_status until terminal=true.

verify_document input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "pack_id",
    "document_text",
    "idempotency_key"
  ],
  "properties": {
    "mode": {
      "enum": [
        "legal",
        "procurement",
        "compliance",
        "financial",
        "hr",
        "academic",
        "custom",
        "code"
      ],
      "type": "string",
      "description": "Optional mode override; normally omit this"
    },
    "pack_id": {
      "type": "string",
      "format": "uuid",
      "description": "The Vera pack ID to verify against"
    },
    "document_text": {
      "type": "string",
      "maxLength": 500000,
      "description": "The full document text; whitespace does not count toward the minimum"
    },
    "idempotency_key": {
      "type": "string",
      "pattern": "^[A-Za-z0-9._:-]+$",
      "maxLength": 200,
      "minLength": 8,
      "description": "Required retry key. Reuse only for this exact pack, document, and mode."
    }
  },
  "additionalProperties": false
}
verify_document output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {},
  "additionalProperties": true
}
verify_document annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_verification_status — Check a Vera verification run
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Poll a run using poll_after_ms until terminal=true. Only call it clean when verdict=clean, coverage_complete=true, and result_consistent=true; otherwise follow next_action.

get_verification_status input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "run_id"
  ],
  "properties": {
    "run_id": {
      "type": "string",
      "format": "uuid",
      "description": "The run_id returned by verify_document"
    }
  },
  "additionalProperties": false
}
get_verification_status output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {},
  "additionalProperties": true
}
get_verification_status annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
list_packs — List available Vera packs
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

List owned and public packs. Select from available_packs and require readiness.query_ready=true. If none fits, do not guess a pack_id: propose a finite pack plan, ask the user to approve a credit ceiling, then use start_pack_build if approved.

list_packs input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
list_packs output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {},
  "additionalProperties": true
}
list_packs annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_pack_coverage — Get a Vera pack's coverage
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Inspect readiness, source coverage and freshness before high-stakes use. Disclose incomplete or stale coverage. query_ready means usable, minimum_coverage_ready means every measured section has a rule, and fully_strengthened means every measured section is satisfied. fully_ready is legacy-compatible and is not a comprehensiveness claim.

get_pack_coverage input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "pack_id"
  ],
  "properties": {
    "pack_id": {
      "type": "string",
      "format": "uuid",
      "description": "The Vera pack ID"
    }
  },
  "additionalProperties": false
}
get_pack_coverage output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {},
  "additionalProperties": true
}
get_pack_coverage annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
start_pack_build — Start or continue a Vera pack build
Advertised by the server during the last successful anonymous check.
Open-world

Start a paid asynchronous pack build after the user explicitly approves max_credits. Supply exactly one of pack_id (an owned AI-buildable pack) or new_pack. The response returns immediately with job_id; poll get_pack_build_status only while active=true. max_credits is a hard ceiling, not a promised final charge. Reuse idempotency_key only for an exact retry.

start_pack_build input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "max_credits",
    "idempotency_key"
  ],
  "properties": {
    "pack_id": {
      "type": "string",
      "format": "uuid",
      "description": "An existing owned AI-buildable pack; mutually exclusive with new_pack"
    },
    "new_pack": {
      "type": "object",
      "required": [
        "name",
        "intention",
        "mode"
      ],
      "properties": {
        "mode": {
          "enum": [
            "legal",
            "procurement",
            "compliance",
            "financial",
            "hr",
            "academic",
            "custom",
            "code"
          ],
          "type": "string"
        },
        "name": {
          "type": "string",
          "maxLength": 120,
          "minLength": 1
        },
        "intention": {
          "type": "string",
          "maxLength": 4000,
          "minLength": 10,
          "description": "The exact finite purpose and coverage the pack must provide"
        },
        "jurisdiction": {
          "type": "string",
          "maxLength": 120
        }
      },
      "description": "A new Vera pack to create; mutually exclusive with pack_id",
      "additionalProperties": false
    },
    "max_rounds": {
      "type": "integer",
      "default": 3,
      "maximum": 5,
      "minimum": 1,
      "description": "Maximum strengthening rounds; normally 3"
    },
    "max_credits": {
      "type": "integer",
      "maximum": 5000,
      "minimum": 3,
      "description": "Hard credit ceiling explicitly approved by the user for this build job"
    },
    "idempotency_key": {
      "type": "string",
      "pattern": "^[A-Za-z0-9._:-]+$",
      "maxLength": 200,
      "minLength": 8,
      "description": "Required retry key; reuse only for this exact build request"
    }
  },
  "additionalProperties": false
}
start_pack_build output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {},
  "additionalProperties": true
}
start_pack_build annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_pack_build_status — Check a Vera pack build
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Check a durable pack-build job. Poll only while active=true. When stopped, use readiness_summary and present available_actions honestly; a usable budget pause offers use now or a separately approved finite continuation. Never restart merely because the AI client's execution window ended.

get_pack_build_status input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "job_id"
  ],
  "properties": {
    "job_id": {
      "type": "string",
      "format": "uuid",
      "description": "The job_id returned by start_pack_build"
    }
  },
  "additionalProperties": false
}
get_pack_build_status output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {},
  "additionalProperties": true
}
get_pack_build_status annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-06: 1 of 1 checks answered

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

Maintenance history

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

  • · probe · passed · 1074 ms · metadata changed · 7 tool(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 vera-ink-mcp https://vera-mcp-production.up.railway.app/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 vera-ink-mcp --url https://vera-mcp-production.up.railway.app/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable vera-ink-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "vera-ink-mcp": {
      "url": "https://vera-mcp-production.up.railway.app/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "vera-ink-mcp": {
      "type": "streamableHttp",
      "url": "https://vera-mcp-production.up.railway.app/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start vera-ink-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "vera-ink-mcp": {
      "type": "http",
      "url": "https://vera-mcp-production.up.railway.app/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 vera-ink-mcp https://vera-mcp-production.up.railway.app/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://vera-mcp-production.up.railway.app/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": {
    "vera-ink-mcp": {
      "serverUrl": "https://vera-mcp-production.up.railway.app/mcp"
    }
  }
}

Let your agent find its tools

Find servers like vera.ink 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 vera.ink 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