
Connects Claude to sthan.io's US postal APIs. You get eight tools: verify addresses against USPS data with DPV and ZIP+4, parse freeform text into structured components, autocomplete addresses/cities/ZIPs with sub-100ms response times, forward and reverse geocoding with accuracy scores, and IPv4/IPv6 geolocation. The verify endpoint is the standout here, returning delivery point validation and residential/commercial flags from real postal records instead of guessing. Runs via stdio, needs a free API key from sthan.io (no credit card), and works with Claude Desktop, Cursor, VS Code, or any MCP client. Useful when you're building workflows that need to validate shipping addresses, enrich location data, or let Claude handle geospatial queries without hallucinating coordinates.
MCP server for sthan.io — give your AI assistant the ability to verify, parse, autocomplete, and geocode US addresses, and look up IP geolocation. Works with Claude Desktop, Claude Code, Cursor, VS Code, Windsurf, and any MCP-compatible client.
8 tools · TypeScript · stdio transport · Free tier, no credit card required.
| Tool | What it does |
|---|---|
sthan_verify_address | Verify a US address is real and deliverable. Returns standardized format, ZIP+4, DPV, residential/commercial. |
sthan_parse_address | Parse freeform US address text into structured components (street number, name, type, direction, unit, city, state, zip). |
sthan_autocomplete_address | Suggest complete US addresses from partial input. Sub-100ms. |
sthan_autocomplete_city | Suggest US cities from partial input, with state code. |
sthan_autocomplete_zipcode | Suggest US ZIP codes from partial input. |
sthan_geocode | US address → latitude/longitude with accuracy + confidence. |
sthan_reverse_geocode | Latitude/longitude → nearest US street address with distance in meters. |
sthan_ip_geolocation | IPv4 or IPv6 → location (country to postal code, local time, flag, currency), the network behind it (ASN, ISP, proxy/hosting flags) and a confidence score. |
Sign up at sthan.io and create a key from the dashboard. No credit card.
sthan.mcpb and double-click it. Claude asks for your API key and keeps it in your system keychain. Nothing else to install.your_key_here with your key in Cursor Settings > MCP.claude mcp add sthan -e STHAN_API_KEY=your_key_here -- npx -y @sthan/mcp-server (details below).Replace your_key_here with your key. Every setup below downloads the latest @sthan/mcp-server from npm and calls the live API at https://api.sthan.io.
Claude Code (terminal):
claude mcp add sthan -e STHAN_API_KEY=your_key_here -- npx -y @sthan/mcp-server
On native Windows, wrap npx with cmd /c:
claude mcp add sthan -e STHAN_API_KEY=your_key_here -- cmd /c npx -y @sthan/mcp-server
Add --scope user to use it in every project. Start claude and type /mcp to confirm sthan is connected.
Claude Desktop: edit claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop:
{
"mcpServers": {
"sthan": {
"command": "npx",
"args": ["-y", "@sthan/mcp-server"],
"env": { "STHAN_API_KEY": "your_key_here" }
}
}
}
Cursor: the same JSON in ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project).
Windsurf: the same JSON in ~/.codeium/windsurf/mcp_config.json.
VS Code: create .vscode/mcp.json. VS Code asks for the key once and stores it securely:
{
"inputs": [
{ "type": "promptString", "id": "sthan-api-key", "description": "sthan.io API key", "password": true }
],
"servers": {
"sthan": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@sthan/mcp-server"],
"env": { "STHAN_API_KEY": "${input:sthan-api-key}" }
}
}
}
Try it without an AI client (opens the official MCP Inspector in your browser):
npx @modelcontextprotocol/inspector -e STHAN_API_KEY=your_key_here npx -y @sthan/mcp-server
Click Connect, then Tools > List Tools, pick a tool, and run it.
Troubleshooting
-y in npx -y. Without it, npx waits for an "OK to install?" answer that an AI client cannot give, and the server never starts.claude mcp add ... cmd /c ... command from PowerShell or Command Prompt. Git Bash rewrites /c to C:/, which saves a broken command that times out (fix: prefix it with MSYS_NO_PATHCONV=1).spawn npx ENOENT, use "command": "cmd" with "args": ["/c", "npx", "-y", "@sthan/mcp-server"].MCP_TOOL_TIMEOUT=150000 before starting claude; MCP Inspector: raise Request Timeout in its Configuration panel).Once configured, just ask your AI assistant naturally:
| Variable | Required | Description |
|---|---|---|
STHAN_API_KEY | Yes | Your sthan.io API key (sthan_test_* for development, sthan_live_* for production) |
STHAN_API_URL | No | Override base URL (default: https://api.sthan.io) |
Most calls return in 1 to 3 seconds. Address verification and parsing can take longer (up to about 2 minutes) when an address cannot be matched from sthan.io's own data and needs a live postal lookup, so the server waits up to 150 seconds for those two tools. If your MCP client stops waiting sooner, raise its tool timeout (for example, in Claude Code set MCP_TOOL_TIMEOUT=150000).
This monorepo publishes two packages:
| Package | npm | Purpose |
|---|---|---|
@sthan/mcp-server | The MCP server itself — the binary that your client launches | |
@sthan/core | TypeScript SDK for direct programmatic use of sthan.io APIs |
git clone https://github.com/sthan-io/mcp-server.git
cd mcp-server
npm install
npm run build --workspaces
Then run the server with STHAN_API_KEY=sthan_test_... node packages/mcp-server/dist/index.js.
llms-full.txt): https://api.sthan.io/llms-full.txtMIT — see LICENSE.
STHAN_API_KEY*secretYour sthan.io API key (get one free at https://sthan.io/dashboard)