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 DesktopConnectors UI · claude_desktop_config.jsonyes
Cursor.cursor/mcp.jsonyes
OpenAI Codex CLI~/.codex/config.tomlyes
WorkBuddy / CodeBuddy~/.workbuddy/mcp.json · ~/.codebuddy/.mcp.jsonCodeBuddy only
Doubao Workin-app connectors, no fileyes
Devin Desktop%AppData%\devin\mcp_config.jsonyes
DeepSeek Harness (dsh)~/.dsh/profiles/<name>/cordis.patch.ymlyes
Gemini CLI~/.gemini/settings.jsonyes
OpenCode~/.config/opencode/opencode.jsonyes
Qoder~/.qoder/settings.json (CLI) · Settings → MCP (IDE)yes
Reasonixreasonix.toml · .mcp.jsonyes
Mobile (Kelivo / Joey / Systemprompt)in-app, no config fileyes
Any other clientcommand + args + envyes

The endpoint

One URL, nothing to install. Auth is a bearer header, or ?apikey= in the URL for the clients that can't set one.

https://api.datasink.ing/mcp

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

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, then paste the URL with your key already in it:

https://api.datasink.ing/mcp?apikey=YOUR_KEY

The key has to be in the URL. A bare URL makes the connector attempt OAuth, and this server has none — you get “Couldn't register with …'s sign-in service.” Then restart the app; connectors load at launch.

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

One command — it writes the config for you:

codex mcp add datasinking --url https://api.datasink.ing/mcp \
  --bearer-token-env-var DATASINK_API_KEY

codex mcp list        # → datasinking

Set that environment variable before launching — Codex stores the variable's name, not the key itself.

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 →

Doubao Work (ByteDance)

no file — configured in the app

ByteDance's counterpart to WorkBuddy. This one is configured entirely in the UI — there is no config file to edit, which is why it doesn't follow the pattern of the rows above:

技能 · 连接器 · 伙伴 → 新建 → 新建自定义连接器

  • Transport: HTTP (STDIO is offered too, if you'd rather run the local server)
  • URL: https://api.datasink.ing/mcp
  • 自定义 Headers: Authorization = Bearer YOUR_KEY

Save and confirm the toggle is on. Two things worth knowing: custom MCP connectors load only in the desktop client — the browser and mobile builds ignore them — and Doubao accepts the header directly, so the ?apikey= fallback isn't needed here.

Full setup guide →

Devin Desktop

%AppData%\devin\mcp_config.json

Formerly Windsurf. Get the right file via Cascade → MCP → Open MCP config file:

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

The remote field is serverUrl, not url — the only client here that differs. On Windows the file is %AppData%\devin\mcp_config.json; on macOS and Linux, ~/.config/devin/mcp_config.json.

Full setup guide →

DeepSeek Harness (dsh)

~/.dsh/profiles/<name>/cordis.patch.yml

dsh has no MCP config file — servers are plugins. Install it into a profile first:

dsh plugin --profile web add @deepseek-ai/dsh-mcp-client

Then add this row to that profile's patch layer:

- insert:
    - id: mcp-datasinking
      name: '@deepseek-ai/dsh-mcp-client'
      config:
        serverName: datasinking
        transport: streamable-http
        url: https://api.datasink.ing/mcp
        headers:
          Authorization: !!js '`Bearer ${process.env.DATASINK_API_KEY}`'
        failOnStartupError: true

Keep failOnStartupError: true. The default is false, which connects to nothing and reports no error. Tools appear as mcp__datasinking__<tool>.

Full setup guide →

Gemini CLI

~/.gemini/settings.json

One command, or edit the config:

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

gemini mcp list        # → datasinking

The config-file field is httpUrl, not url — url means SSE:

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

The consumer app (gemini.google.com → Connected Apps) is OAuth-only, so use the key-in-URL form ?apikey= there, or stick with the CLI.

Full setup guide →

OpenCode

~/.config/opencode/opencode.json

OpenCode merges config from ~/.config/opencode/opencode.json and a project opencode.json. Its MCP key is mcp — not mcpServers:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "datasinking": {
      "type": "remote",
      "url": "https://api.datasink.ing/mcp",
      "oauth": false,
      "headers": { "Authorization": "Bearer {env:DATASINK_API_KEY}" }
    }
  }
}

Two settings do the real work. "oauth": false stops OpenCode from treating our 401 as an OAuth challenge — leave it out and you get an authorization error instead of a missing-key error. And note the interpolation syntax is {env:NAME}, where Claude Code and Cursor use ${NAME}.

Full setup guide →

Qoder

~/.qoder/settings.json (CLI) · Settings → MCP (IDE)

Qoder CLI and Qoder IDE read different configuration. For the CLI, add to mcpServers in ~/.qoder/settings.json:

{
  "mcpServers": {
    "datasinking": {
      "type": "http",
      "url": "https://api.datasink.ing/mcp",
      "headers": { "Authorization": "Bearer YOUR_KEY" }
    }
  }
}

stdio is the default type, so a URL without "http" fails as a launch error. Tools appear as mcp__datasinking__<tool>. In the IDE, open Settings (Ctrl Shift ,) → MCP → My Servers → + Add instead — the IDE does not read the CLI file.

Full setup guide →

Reasonix

reasonix.toml · .mcp.json

Reasonix reads the official MCP Registry, so there's a one-liner. Or declare the server yourself with a [[plugins]] entry in ./reasonix.toml (or ~/.reasonix/config.toml for every project):

reasonix mcp install io.github.heubme2020/datasinking

# or, by hand:
[[plugins]]
name    = "datasinking"
type    = "http"
url     = "https://api.datasink.ing/mcp"
headers = { Authorization = "Bearer ${DATASINK_API_KEY}" }

type defaults to stdio, so the "http" line is required. Cold servers connect in the background — if a tool isn't there yet, retry rather than re-checking your config. Tools appear as mcp__datasinking__<tool>.

Full setup guide →

Mobile (Kelivo / Joey / Systemprompt)

in-app, no config file

Any mobile app that speaks MCP over streamable HTTP works — nothing to install, no config file. Add the server in the app (Settings → MCP → Add):

URL:           https://api.datasink.ing/mcp
Authorization: Bearer YOUR_KEY

# if the app can't set a header, put the key in the URL:
#   https://api.datasink.ing/mcp?apikey=YOUR_KEY

Known-working apps: Kelivo (kelivo.psycheas.top), Joey MCP Client (Android), Systemprompt (Android/iOS). It's the same endpoint the desktop clients use, so the six tools and the ?apikey= fallback behave identically.

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

Nearly every failure is one of these three:

{"detail":"Missing API key"}Nothing was sent — the environment variable wasn't set before the client launched.
{"detail":"无效的 API key"}The key isn't recognised — check for a stray space or a missing Bearer .
no toolsRestart the client — all of them read MCP config at launch.

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.