Connect an AI agent (MCP)

DataSinking is an MCP server. Point your agent at it and it can search and read full-text filings from China, Korea, Japan and Taiwan in plain language — no code, six tools. Get a free key first. Part of the API reference.

Pick your client

ClientConfig fileHosted URL works
Claude Code~/.claude.json, .mcp.jsonyes
Claude Desktopclaude_desktop_config.json + Connectors UIvia the UI
Cursor.cursor/mcp.jsonyes
OpenAI Codex CLI~/.codex/config.tomlyes
WorkBuddy / CodeBuddy~/.workbuddy/mcp.json, ~/.codebuddy/.mcp.jsonCodeBuddy only
Anything elsecommand + args + envusually
DeepSeek (Harness dsh)~/.dsh/cordis.patch.yml (YAML)yes
Windsurf / Devin~/.config/devin/mcp_config.jsonyes

The hosted endpoint

One URL, nothing to install, no Python or Node on your machine. Auth is a bearer header, or ?apikey= for clients that can't set headers.

https://api.datasink.ing/mcp

Authorization: Bearer YOUR_KEY      # or: https://api.datasink.ing/mcp?apikey=YOUR_KEY

Every client below shows the hosted form where it's supported. Where it isn't, the docs fall back to the local server — same six tools, run on your own machine via npx or uvx, still nothing to install.

Claude Code

.mcp.json · ~/.claude.json

One command — add the key when prompted, then check it connected:

claude mcp add --transport http datasinking https://api.datasink.ing/mcp \
  --header "Authorization: Bearer YOUR_KEY"

claude mcp list        # → datasinking: ✔ Connected

Add --scope user to get it in every project instead of just this one. Claude Code health-checks the server itself, so claude mcp get datasinking tells you exactly why a connection failed.

Full setup guide →

Claude Desktop

claude_desktop_config.json

Settings → Connectors → Add → Add custom connector, paste https://api.datasink.ing/mcp, and complete the auth prompt. Don't edit the JSON file for this and don't use mcp-remote — that file is stdio-only and takes no url key.

Full setup guide →

Cursor

.cursor/mcp.json

{
  "mcpServers": {
    "datasinking": {
      "url": "https://api.datasink.ing/mcp",
      "headers": { "Authorization": "Bearer ${env:DATASINK_API_KEY}" }
    }
  }
}

Cursor interpolates ${env:NAME} — not ${NAME} like Claude Code. Restart Cursor after editing; connection errors show up under Output → MCP Logs.

Full setup guide →

OpenAI Codex CLI

~/.codex/config.toml

[mcp_servers.datasinking]
url = "https://api.datasink.ing/mcp"
bearer_token_env_var = "DATASINK_API_KEY"

Codex has no type field — transport is inferred from whether you wrote url or command. The header key is http_headers, not headers, and a bare bearer_token is rejected — use the env var.

Full setup guide →

WorkBuddy / CodeBuddy (Tencent)

~/.workbuddy/mcp.json · ~/.codebuddy/.mcp.json

These are two different products with two different config files — the most common reason a config “doesn't take effect”:

// WorkBuddy (desktop app) — ~/.workbuddy/mcp.json
{
  "mcpServers": {
    "datasinking": {
      "command": "npx",
      "args": ["-y", "datasinking-mcp"],
      "env": { "DATASINK_API_KEY": "YOUR_KEY" }
    }
  }
}

WorkBuddy's documented config is stdio-only; the type: "http" form works on CodeBuddy Code, which keeps its config in ~/.codebuddy/.mcp.json. Restart the app after editing either one.

Full setup guide →

Any other MCP client

command + args + env

Local, stdio, Node 18+ or Python 3.8+:

{
  "mcpServers": {
    "datasinking": {
      "command": "npx",
      "args": ["-y", "datasinking-mcp"],
      "env": { "DATASINK_API_KEY": "YOUR_KEY" }
    }
  }
}

# Python instead of Node:
#   "command": "uvx", "args": ["--from", "datasinking[mcp]", "datasinking-mcp"]

Full setup guide →

What the agent gets

Six tools. They map onto the REST endpoints one-to-one, so anything in the API reference is reachable by asking.

list_exchangesWhich markets are covered, and how much
list_stocksCompanies on one exchange
list_reportsA company's filings — metadata only
get_reportOne filing, full text
list_sectionsA filing's chapter headings, with sizes
get_sectionOne chapter only — token-efficient, best for RAG

Ask “Which exchanges does DataSinking cover?” as a first test — the agent calling list_exchanges proves the whole chain works. Then try “What does Toyota's latest annual report say about risks?”

If it won't connect

The hosted endpoint is POST-only and stateless. Those two facts cause most failed connections, because clients tend to assume the opposite:

401{"detail":"Missing API key"} — nothing was sent. {"detail":"无效的 API key"} — the key isn't recognised.
405GET was used. There is no SSE stream — POST only.
no toolsRestart the client. Every one of them reads MCP config at launch.
blank headerThe env var wasn't set before the client launched, or you used the wrong interpolation syntax for that client.

To tell “my client is misconfigured” apart from “my key is wrong”, skip the client entirely:

curl -s -X POST https://api.datasink.ing/mcp \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Per-client troubleshooting — including the errors each client actually prints — is in the guides linked above, under docs/mcp/.

Keep the attribution

Every response carries a source field naming the official platform the filing came from — cninfo.com.cn (China), DART (Korea), EDINET (Japan), MOPS (Taiwan). The MCP tool descriptions tell the model to keep it when citing. Please don't strip it when you redistribute.