Koskamo

SOS.city MCP

An MCP server providing AI agents access to SOS.city's public records library, including building permits, code enforcement, weather alerts, and wildfires. It offers tools to search the library, list places and departments, and retrieve specific records with source citations.

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.

SOS.city MCP logo, by 5arz Services LLCCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-08Published by 5arz Services LLC
You need:No key? You still get the free allowance.For more, pick a plan; your key appears on the welcome page and in your account.
MCP endpoint (Streamable HTTP)
https://api.sos.city/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 · 1 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

  • Search public records by question or keywords scoped to a place
  • Retrieve building permits, inspections, and code enforcement cases
  • Get live weather alerts and earthquake data for specific locations
  • List available places, departments, and data gaps in the library

Source and maintenance

Community listingRegistry 1.1.0

Protocol and capabilities

Server
sos-city 1.1.0
MCP protocol negotiated in check
2025-06-18
Tools
10 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

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

SOS.city indexes public records by place, shelf (department) and publisher. Start with search_library; pass a place id to include everything that covers it. Always show the publisher and link to the original when you use a result; the original wins if it differs. If nothing fits, check list_gaps, then offer request_record. Some data is paid (full history, bulk records, city data packs): get_store lists prices; buy returns a checkout link for the person who pays. Never use these tools to locate, profile or screen a person (tenant, employment, credit or insurance decisions): SOS.city is not a consumer reporting agency. Not an emergency service: in an emergency, call 911.

Tools

10 advertised

search_library — Search the public record
Advertised by the server during the last successful anonymous check.
Advertised read-only

Find public-records sources (datasets, portals, registers, reports) by question or keywords. Use `place` to include everything covering a place, from the city up to federal and global sources. Returns the publisher, how to get the data (API endpoint or page), update rate, last update, licence and whether we verified it. Not for finding, profiling or screening people.

search_library input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 50,
      "minimum": 1
    },
    "place": {
      "type": "string",
      "description": "Place id, e.g. 'us-ca-los-angeles', 'us-ca', 'us', 'germany'. Use list_places to find ids."
    },
    "query": {
      "type": "string",
      "description": "What you're looking for, e.g. 'open code enforcement cases' or 'boil water notices'."
    },
    "department": {
      "type": "string",
      "description": "Shelf id: water, power, safety, housing, laws, funding, services, transport, environment, health, people, consumer, education, jobs, portals."
    }
  }
}
search_library annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
get_source — Get one source
Advertised by the server during the last successful anonymous check.
Advertised read-only

Full details of one source by id: publisher, original link, API endpoint, formats, update rate, last update, licence, location detail, check status and notes.

get_source input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "integer"
    }
  }
}
get_source annotations
{
  "readOnlyHint": true
}
list_places — List places
Advertised by the server during the last successful anonymous check.
Advertised read-only

The atlas: world, countries, states, counties and cities, with their ids. Filter by parent id (e.g. 'us' for US states) or kind.

list_places input schema
{
  "type": "object",
  "properties": {
    "kind": {
      "enum": [
        "world",
        "country",
        "state",
        "county",
        "city"
      ],
      "type": "string"
    },
    "name": {
      "type": "string",
      "description": "Part of a place name."
    },
    "parent": {
      "type": "string"
    }
  }
}
list_places annotations
{
  "readOnlyHint": true
}
list_departments — List shelves
Advertised by the server during the last successful anonymous check.
Advertised read-only

The 15 departments (shelves) every source sits on, with what each covers.

list_departments input schema
{
  "type": "object",
  "properties": {}
}
list_departments annotations
{
  "readOnlyHint": true
}
list_gaps — What's missing
Advertised by the server during the last successful anonymous check.
Advertised read-only

Records people need that the library doesn't hold yet, or that no agency publishes. Check this before telling a user a record doesn't exist.

list_gaps input schema
{
  "type": "object",
  "properties": {
    "place": {
      "type": "string"
    },
    "status": {
      "enum": [
        "researching",
        "sourced",
        "no_public_source"
      ],
      "type": "string"
    }
  }
}
list_gaps annotations
{
  "readOnlyHint": true
}
search_records — Search the records themselves
Advertised by the server during the last successful anonymous check.
Advertised read-only

The records SOS.city reads from agencies' open data, one row each: building permits, code-enforcement cases, inspections, certificates of occupancy, new business registrations, grants, weather alerts, earthquakes, US wildfires (NIFC) and SCE power shutoffs. Filter by place, kind, ZIP or street address. Each row links to the agency's original. History depends on the plan (Free: 30 days, 100 rows). full_history=true (1 credit) and limit over 100 (1 credit per extra 100 rows, up to 1,000) are paid from the API key's credits; see get_store.

search_records input schema
{
  "type": "object",
  "properties": {
    "zip": {
      "type": "string",
      "description": "Five-digit ZIP."
    },
    "kind": {
      "enum": [
        "permit",
        "code_case",
        "inspection",
        "cofo",
        "business",
        "grant",
        "weather_alert",
        "earthquake",
        "wildfire",
        "power_shutoff"
      ],
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "default": 25,
      "maximum": 1000,
      "minimum": 1,
      "description": "Over 100 is paid (1 credit per extra 100 rows)."
    },
    "place": {
      "type": "string",
      "description": "Place id, e.g. 'us-ca-los-angeles'."
    },
    "since": {
      "type": "string",
      "description": "YYYY-MM-DD."
    },
    "address": {
      "type": "string",
      "description": "Street address, e.g. '200 N Spring St'. Matches by house number and street name."
    },
    "full_history": {
      "type": "boolean",
      "description": "Past the plan's history window (1 credit)."
    }
  }
}
search_records annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
request_record — Request a record
Advertised by the server during the last successful anonymous check.
Open-world

Ask SOS.city to find a public record that isn't in the library. It joins the gap board; give an email to hear back. Never for locating or profiling a person.

request_record input schema
{
  "type": "object",
  "required": [
    "question"
  ],
  "properties": {
    "email": {
      "type": "string"
    },
    "place": {
      "type": "string"
    },
    "question": {
      "type": "string"
    }
  }
}
request_record annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
get_store — See prices and how to pay
Advertised by the server during the last successful anonymous check.
Advertised read-only

The SOS.city data store: what's free, what costs credits (1 credit = 1 cent), credit packs, city data packs, building records and deep searches, and every way to pay (credits with an API key, x402 USDC, or a Stripe link for a person). Shows the caller's credit balance when an API key is sent.

get_store input schema
{
  "type": "object",
  "properties": {}
}
get_store annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
buy — Buy credits or a city data pack
Advertised by the server during the last successful anonymous check.
Open-world

Starts a one-time purchase and returns a Stripe Checkout link for the person who pays, plus a status_url to poll. product: credits_1k ($10), credits_10k ($79) or city_pack ($29, needs place). The person must agree to the data-use terms (no screening or profiling people): pass agree_data_use=true only after they have.

buy input schema
{
  "type": "object",
  "required": [
    "product",
    "email",
    "agree_data_use"
  ],
  "properties": {
    "email": {
      "type": "string",
      "description": "Email of the person paying. Receipts and the account go there."
    },
    "place": {
      "type": "string",
      "description": "For city_pack: a place id, e.g. us-ca-los-angeles."
    },
    "product": {
      "enum": [
        "credits_1k",
        "credits_10k",
        "city_pack"
      ],
      "type": "string"
    },
    "agree_data_use": {
      "type": "boolean",
      "description": "True once the person accepts: no tenant, employment, credit or insurance screening, and no locating or profiling anyone."
    }
  }
}
buy annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
get_city_pack — Get a city data pack
Advertised by the server during the last successful anonymous check.

Every source that covers one place (with publisher, original link, licence and reuse terms) plus a year of records whose sources allow reuse. Costs 2900 credits from the API key's balance. Without credits, use buy (product city_pack) or the REST URL with x402.

get_city_pack input schema
{
  "type": "object",
  "required": [
    "place"
  ],
  "properties": {
    "place": {
      "type": "string",
      "description": "Place id, e.g. us-ca-los-angeles."
    }
  }
}
get_city_pack annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

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

Maintenance history

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

  • · probe · passed · 286 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 sos-city-mcp https://api.sos.city/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 sos-city-mcp --url https://api.sos.city/mcp

Cursor

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

Cline

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

VS Code

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

Let your agent find its tools

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