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
| Client | Config file | Hosted URL works |
| Claude Code | ~/.claude.json · .mcp.json | yes |
| Claude Desktop | Connectors UI · claude_desktop_config.json | yes |
| Cursor | .cursor/mcp.json | yes |
| OpenAI Codex CLI | ~/.codex/config.toml | yes |
| WorkBuddy / CodeBuddy | ~/.workbuddy/mcp.json · ~/.codebuddy/.mcp.json | CodeBuddy only |
| Doubao Work | in-app connectors, no file | yes |
| Devin Desktop | %AppData%\devin\mcp_config.json | yes |
| DeepSeek Harness (dsh) | ~/.dsh/profiles/<name>/cordis.patch.yml | yes |
| Gemini CLI | ~/.gemini/settings.json | yes |
| OpenCode | ~/.config/opencode/opencode.json | yes |
| Qoder | ~/.qoder/settings.json (CLI) · Settings → MCP (IDE) | yes |
| Reasonix | reasonix.toml · .mcp.json | yes |
| Mobile (Kelivo / Joey / Systemprompt) | in-app, no config file | yes |
| Any other client | command + args + env | yes |
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.
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.
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.
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.
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.
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.
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.
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: trueKeep failOnStartupError: true. The default is false, which connects to nothing and reports no error. Tools appear as mcp__datasinking__<tool>.
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.
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}.
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.
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>.
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.
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"]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_exchanges | Which markets are covered, and how much |
| list_stocks | Companies on one exchange |
| list_reports | A company's filings — metadata only |
| get_report | One filing, full text |
| list_sections | A filing's chapter headings, with sizes |
| get_section | One 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 tools | Restart 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.