Koskamo

Permit Verdicts MCP

Provides decision-ready verdicts for AI agents, including a crypto settlement oracle for resolving price events and municipal risk intelligence for building permits. It offers tools to check permit activity, find active projects, and resolve crypto price conditions with audit trails.

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.

Permit Verdicts MCP logo, by Permit VerdictsCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by Permit Verdicts
MCP endpoint (Streamable HTTP)
https://permit-api-production-7375.up.railway.app/mcp
Vendor documentation

What its tools do

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

10 of 10 have a description · 10 of 10 declare behavior hints · 8 of 8 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Check building permit activity for a specific address
  • Resolve crypto price events with venue-specific evidence
  • Find recently permitted projects in a city
  • Verify the authenticity of a signed decision ID

Source and maintenance

Community listingRegistry 0.3.0

Protocol and capabilities

Server
permit-intelligence 0.5.0
MCP protocol negotiated in check
2025-11-25
Tools
10 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Tools

10 advertised

list_jurisdictions
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

List cities covered by the Permit Intelligence API, with pricing and payment details. Free. Full paid feeds for humans: https://permitverdict.com/pricing

list_jurisdictions input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
list_jurisdictions annotations
{
  "title": "List covered cities",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
check_permit_activity
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

FREE. Quick check on whether a street address has building-permit activity on record: how many permits, how many are open, and when the last activity was. No permit detail and no verdict — use get_permit_verdict for those. Full paid feeds for humans: https://permitverdict.com/pricing

check_permit_activity input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "jurisdiction",
    "address"
  ],
  "properties": {
    "address": {
      "type": "string",
      "minLength": 3,
      "description": "Street address, e.g. '760 14th St'"
    },
    "jurisdiction": {
      "enum": [
        "san_francisco",
        "seattle",
        "austin",
        "nyc",
        "chicago",
        "los_angeles",
        "new_orleans"
      ],
      "type": "string",
      "description": "Covered city, e.g. san_francisco"
    }
  }
}
check_permit_activity annotations
{
  "title": "Check permit activity (free)",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
find_active_projects
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

FREE PREVIEW (5 results). Recently permitted construction projects in a covered city, filtered by declared budget. Use feed='investor' instead to surface expired and abandoned permits (stalled projects, often motivated owners). Full paid feeds for humans: https://permitverdict.com/pricing

find_active_projects input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "jurisdiction"
  ],
  "properties": {
    "days": {
      "type": "integer",
      "maximum": 180,
      "minimum": 1,
      "description": "Lookback window, default 30"
    },
    "feed": {
      "enum": [
        "contractor",
        "investor"
      ],
      "type": "string",
      "description": "contractor = newly filed/issued permits (default); investor = expired/stalled"
    },
    "max_cost": {
      "type": "number",
      "minimum": 0,
      "description": "Maximum declared job value, 0 = no ceiling"
    },
    "min_cost": {
      "type": "number",
      "minimum": 0,
      "description": "Minimum declared job value, default 50000"
    },
    "jurisdiction": {
      "enum": [
        "san_francisco",
        "seattle",
        "austin",
        "nyc",
        "chicago",
        "los_angeles",
        "new_orleans"
      ],
      "type": "string",
      "description": "Covered city, e.g. san_francisco"
    }
  }
}
find_active_projects annotations
{
  "title": "Find active construction projects (free preview)",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
list_settlement_assets
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

FREE. Which crypto assets, venues, operators and modes the settlement oracle supports, plus pricing. Full paid feeds for humans: https://permitverdict.com/pricing

list_settlement_assets input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
list_settlement_assets annotations
{
  "title": "List settlement oracle coverage (free)",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
resolve_price_event
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Settlement verdict for a crypto price event. Answers 'did this asset trade or close above/below a threshold during a window?' with YES/NO/DISPUTED/UNRESOLVED, per-venue evidence from Hyperliquid, Coinbase and Kraken, and stated confidence. (Binance is configured but blocks this host's region; it is reported unavailable rather than silently counted.) Use mode='close' when a market settles on candle closes and mode='touch' when any intrabar print counts — they give different answers and that difference is the most common settlement dispute. Paid: $0.05 in USDC via x402.

resolve_price_event input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "asset",
    "operator",
    "threshold"
  ],
  "properties": {
    "to": {
      "type": "string",
      "description": "ISO-8601 window end. Defaults to now."
    },
    "from": {
      "type": "string",
      "description": "ISO-8601 window start. Defaults to 24h before `to`."
    },
    "mode": {
      "enum": [
        "touch",
        "close"
      ],
      "type": "string",
      "description": "touch = any intrabar print counts (default); close = only candle closes count"
    },
    "asset": {
      "type": "string",
      "description": "Asset symbol, e.g. BTC, ETH, SOL"
    },
    "operator": {
      "enum": [
        "above",
        "at_or_above",
        "below",
        "at_or_below"
      ],
      "type": "string",
      "description": "Comparison against the threshold"
    },
    "threshold": {
      "type": "number",
      "description": "Price threshold in USD",
      "exclusiveMinimum": 0
    },
    "payment_header": {
      "type": "string",
      "description": "X-PAYMENT header from a settled x402 payment. Omit on first call to receive payment requirements."
    }
  }
}
resolve_price_event annotations
{
  "title": "Resolve a crypto price event",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_crypto_spot
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Live cross-venue spot price with venue agreement and spread. A wide spread means venues disagree and any settlement in that range is contestable. Paid: $0.01 in USDC via x402.

get_crypto_spot input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "asset"
  ],
  "properties": {
    "asset": {
      "type": "string",
      "description": "Asset symbol, e.g. BTC, ETH, SOL"
    },
    "payment_header": {
      "type": "string",
      "description": "X-PAYMENT header from a settled x402 payment."
    }
  }
}
get_crypto_spot annotations
{
  "title": "Cross-venue spot price",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
decode_decision_id
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

FREE. Read what a Permit Verdict decision_id claims and check whether we actually issued it. The id is signed by the same wallet that receives payment, so forgery and after-the-fact editing are both detectable. Needs no payment. This tells you the record is genuine; it does NOT tell you the verdict is still correct — use verify_decision for that. Full paid feeds for humans: https://permitverdict.com/pricing

decode_decision_id input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "decision_id"
  ],
  "properties": {
    "decision_id": {
      "type": "string",
      "description": "A decision_id of the form pv1.<payload>.<signature>"
    }
  }
}
decode_decision_id annotations
{
  "title": "Decode and authenticate a decision_id (free)",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
verify_decision
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Re-resolve an attested settlement against the price venues right now and report whether it still holds: CONFIRMED, CHANGED or INDETERMINATE. Call this whenever someone hands you a decision_id you are about to rely on — an attestation proves what was said at the time, but only a fresh resolution proves it is still true. Exchanges revise candle history, and a venue that was unreachable at issue time may answer differently now. Paid: $0.02 in USDC via x402 — cheaper than resolving fresh because you are checking someone else's answer rather than buying a new one.

verify_decision input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "decision_id"
  ],
  "properties": {
    "decision_id": {
      "type": "string",
      "description": "A decision_id issued by /v1/oracle/attest"
    },
    "payment_header": {
      "type": "string",
      "description": "X-PAYMENT header from a settled x402 payment. Omit on first call to receive payment requirements."
    }
  }
}
verify_decision annotations
{
  "title": "Verify an attested settlement",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
attest_price_event
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Settlement verdict plus a citable record: a signed decision_id, an integrity hash over the evidence, and every candle that determined the outcome. Use this when the answer may later have to be defended to a counterparty, not when you just need to know. KEEP THE decision_id — it is self-contained, so anyone you show it to can authenticate it for free and re-check it for $0.02 without you supplying anything else. Paid: $0.25 in USDC via x402.

attest_price_event input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "asset",
    "operator",
    "threshold"
  ],
  "properties": {
    "to": {
      "type": "string",
      "description": "ISO-8601 window end. Defaults to now."
    },
    "from": {
      "type": "string",
      "description": "ISO-8601 window start. Defaults to 24h before `to`."
    },
    "mode": {
      "enum": [
        "touch",
        "close"
      ],
      "type": "string",
      "description": "touch (default) or close"
    },
    "asset": {
      "type": "string",
      "description": "Asset symbol, e.g. BTC, ETH, SOL"
    },
    "operator": {
      "enum": [
        "above",
        "at_or_above",
        "below",
        "at_or_below"
      ],
      "type": "string",
      "description": "Comparison against the threshold"
    },
    "threshold": {
      "type": "number",
      "description": "Price threshold in USD",
      "exclusiveMinimum": 0
    },
    "payment_header": {
      "type": "string",
      "description": "X-PAYMENT header from a settled x402 payment."
    }
  }
}
attest_price_event annotations
{
  "title": "Attested settlement record",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_permit_verdict
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Address-level building-permit intelligence for a covered city: normalized permit history + activity signals + a decision-ready verdict with cited public records. Paid: $2.00 in USDC on base via x402.

get_permit_verdict input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "jurisdiction",
    "address"
  ],
  "properties": {
    "address": {
      "type": "string",
      "minLength": 3,
      "description": "Street address, e.g. '760 14th St'"
    },
    "jurisdiction": {
      "enum": [
        "san_francisco",
        "seattle",
        "austin",
        "nyc",
        "chicago",
        "los_angeles",
        "new_orleans"
      ],
      "type": "string",
      "description": "Covered city, e.g. san_francisco"
    },
    "payment_header": {
      "type": "string",
      "description": "Optional X-PAYMENT header value from a completed x402 payment. Omit on first call to receive payment requirements."
    }
  }
}
get_permit_verdict annotations
{
  "title": "Get permit verdict for an address",
  "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
1243 ms
95th percentile latency
1243 ms

Maintenance history

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

  • · probe · passed · 1243 ms · metadata changed · 10 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 permit-verdicts-mcp https://permit-api-production-7375.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 permit-verdicts-mcp --url https://permit-api-production-7375.up.railway.app/mcp

Cursor

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

Cline

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

VS Code

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

Let your agent find its tools

Find servers like Permit Verdicts MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.