CCXT
Official CCXT MCP server - Market data and trading across 100+ exchanges and prediction markets
Normalise Vietnamese addresses and look up companies by name or tax code, through DataCore A2A.
使っているAIアプリを選んで、設定をコピーしてください。
チェック 3/3 合格 · あなたのパソコンで動きます
まず:どの AI を使っていますか?
使っているアプリを選ぶと、下に手順が表示されます。
Claude につなげますが、先に準備が必要です
DataCore A2A のキーが必要です(提供元のサイトで作成) · 先にパソコンへ Python (uv) を入れてください(1 回だけ) · パソコン版 Claude アプリ(Windows または Mac)のみ。Web やスマホでは使えません
提供元のサイトで登録し、次の手順で使う API キーを作ります。料金や無料プランは提供元のサイトで確認してください。
キーの取り方は下の提供元 README にあります
SettingsDeveloperEdit Config
{
"mcpServers": {
"datacore-a2a": {
"command": "uvx",
"args": [
"datacore-a2a-mcp"
],
"env": {
"DATACORE_A2A_URL": "your-value",
"DATACORE_API_KEY": "your-value",
"DATACORE_MANDATE": "your-value",
"DATACORE_SKILLS": "your-value",
"DATACORE_TIMEOUT": "your-value"
}
}
}
}キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください
DataCore A2A を使って、私に何ができるか教えて、1 つやってみせて✓ Claude が DataCore A2A を使っていると言うか、回答に DataCore A2A のツール名が出れば接続成功です
メニュー名は 2026年11月11日 に Anthropic のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
ChatGPT はまだ DataCore A2A につなげません
DataCore A2A はパソコンに入れて使うものですが、ChatGPT は Web 上で動くサーバーにしかつなげません
A · DataCore A2A につなげるアプリを使う
B · 会計・財務・税務 の中で ChatGPT につなげる別のサーバー
同じカテゴリでよく使われているものから、キーなしでアドレスだけでつなげるものを選びました
Claude Code につなげますが、先に準備が必要です
DataCore A2A のキーが必要です(提供元のサイトで作成) · 先にパソコンへ Python (uv) を入れてください(1 回だけ)
提供元のサイトで登録し、次の手順で使う API キーを作ります。料金や無料プランは提供元のサイトで確認してください。
キーの取り方は下の提供元 README にあります
Mac:Command+スペースで Terminal と入力 · Windows:PowerShell を開く
claude mcp add --scope user datacore-a2a --env DATACORE_A2A_URL=your-value --env DATACORE_API_KEY=your-value --env DATACORE_MANDATE=your-value --env DATACORE_SKILLS=your-value --env DATACORE_TIMEOUT=your-value -- uvx datacore-a2a-mcpEnter の前に「your-value」を自分のキーに書き換えてください
キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください
DataCore A2A が一覧にあり、接続済みと表示されれば OK です
DataCore A2A を使って、私に何ができるか教えて、1 つやってみせて✓ Claude Code が DataCore A2A を使っていると言うか、回答に DataCore A2A のツール名が出れば接続成功です
メニュー名は 2026年11月11日 に Anthropic のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
Cursor につなげますが、先に準備が必要です
DataCore A2A のキーが必要です(提供元のサイトで作成) · 先にパソコンへ Python (uv) を入れてください(1 回だけ)
提供元のサイトで登録し、次の手順で使う API キーを作ります。料金や無料プランは提供元のサイトで確認してください。
キーの取り方は下の提供元 README にあります
DataCore A2A の設定で DATACORE_A2A_URL, DATACORE_API_KEY, DATACORE_MANDATE, DATACORE_SKILLS, DATACORE_TIMEOUT が空です。自分のキーを入れて保存します
キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください
DataCore A2A を使って、私に何ができるか教えて、1 つやってみせて✓ Cursor が DataCore A2A を使っていると言うか、回答に DataCore A2A のツール名が出れば接続成功です
メニュー名は 2026年11月11日 に Cursor のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
VS Code につなげますが、先に準備が必要です
DataCore A2A のキーが必要です(提供元のサイトで作成) · 先にパソコンへ Python (uv) を入れてください(1 回だけ)
提供元のサイトで登録し、次の手順で使う API キーを作ります。料金や無料プランは提供元のサイトで確認してください。
キーの取り方は下の提供元 README にあります
DataCore A2A の設定で DATACORE_A2A_URL, DATACORE_API_KEY, DATACORE_MANDATE, DATACORE_SKILLS, DATACORE_TIMEOUT が空です。自分のキーを入れて保存します
キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください
DataCore A2A を使って、私に何ができるか教えて、1 つやってみせて✓ VS Code が DataCore A2A を使っていると言うか、回答に DataCore A2A のツール名が出れば接続成功です
メニュー名は 2026年11月11日 に VS Code のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
Claude Code
claude mcp add --scope user datacore-a2a --env DATACORE_A2A_URL=your-value --env DATACORE_API_KEY=your-value --env DATACORE_MANDATE=your-value --env DATACORE_SKILLS=your-value --env DATACORE_TIMEOUT=your-value -- uvx datacore-a2a-mcpClaude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"datacore-a2a": {
"command": "uvx",
"args": [
"datacore-a2a-mcp"
],
"env": {
"DATACORE_A2A_URL": "your-value",
"DATACORE_API_KEY": "your-value",
"DATACORE_MANDATE": "your-value",
"DATACORE_SKILLS": "your-value",
"DATACORE_TIMEOUT": "your-value"
}
}
}
}Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"datacore-a2a": {
"command": "uvx",
"args": [
"datacore-a2a-mcp"
],
"env": {
"DATACORE_A2A_URL": "your-value",
"DATACORE_API_KEY": "your-value",
"DATACORE_MANDATE": "your-value",
"DATACORE_SKILLS": "your-value",
"DATACORE_TIMEOUT": "your-value"
}
}
}
}VS Code (mcp.json)
{
"servers": {
"datacore-a2a": {
"type": "stdio",
"command": "uvx",
"args": [
"datacore-a2a-mcp"
],
"env": {
"DATACORE_A2A_URL": "your-value",
"DATACORE_API_KEY": "your-value",
"DATACORE_MANDATE": "your-value",
"DATACORE_SKILLS": "your-value",
"DATACORE_TIMEOUT": "your-value"
}
}
}
}DATACORE_A2A_URL 必須 envDATACORE_API_KEY 秘密 envDATACORE_MANDATE 秘密 envDATACORE_SKILLS envDATACORE_TIMEOUT envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
このサーバーのつなぎ方と、各アプリの公式ドキュメントに基づきます。2026年11月10日に確認。
パソコン上で動かせるアプリ
ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月12日にチェック
レジストリ名はドメイン datacore.vn で確認済みです(レジストリがドメインの所有を確認しています)
コードの最終更新:一昨日
MITを使用
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
質問、コツの共有、使えないことの報告ができます。「役に立った」の多い順です。
まだレビューはありません
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック3項目のうち3項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:DATACORE_A2A_URL, DATACORE_API_KEY, DATACORE_MANDATE
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は一昨日、最新バージョン(0.2.5)がレジストリに届いたのは16 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにPython (uv)も必要です。
同じカテゴリには:CCXT, Finance Toolkit, AKQuant
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:↓ 週あたりのダウンロードi★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
Official CCXT MCP server - Market data and trading across 100+ exchanges and prediction markets
500+ transparent financial methods calculated from raw statements, not third-party endpoints.
Write and backtest trading strategies with AKQuant: API lookup, strategy checks, backtest runs
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
English · Tiếng Việt
Lets an MCP client (Claude Code, Claude Desktop, VS Code, Cursor…) use DataCore's data skills as native tools: normalise Vietnamese addresses, validate an address, look up a company, generate embeddings.
MCP client (stdio) ──► datacore-mcp ──HTTPS──► DataCore gateway
Zero dependencies, Python 3.9+.
This server is a client, not a service. It needs a DataCore endpoint and a credential to call it with. Missing either one, it starts, says which variable is absent, and exits.
You need an account on datacore.vn first.
pip install datacore-a2a-mcp
If you installed from GitHub while this was unreleased,
--upgradewill not
move you to the PyPI build — uninstall first, then install again.
Sign in at datacore.vn, then copy the token request header from any call to gateway.datacore.vn (DevTools → Network). 64 hex chars.
No curl equivalent: POST /auth/login RSA-decrypts the password and no endpoint publishes the public key, so only the web app can complete a login. A credential page will remove this step.
Ignore the jwt from the same login — the gateway rejects client-supplied Authorization with 409; token is the header it accepts.
curl -s -X POST https://gateway.datacore.vn/mcp/credentials \
-H "token: <64-character token>" \ -H 'Content-Type: application/json' \ -d '{"name":"claude-code"}' | jq .
201 with the credential, including api_key, key_prefix, allowed_skills, spend_cap_vnd and quota_period.
Copy api_key straight away — it is returned once. Only a hash is stored, so there is no way to read it back. Lose it and you create a new one.
A 409 here means you are already holding the maximum of 3 active credentials. Revoke one first (see Quotas and limits).
See Configuration below.
There is no web UI for steps 2–3 yet; curl is the way. When a management page exists, these commands keep working.
| Free tier | 500,000 VND of spend per credential per month |
| Price per call | 500 VND by default, so roughly 1,000 calls |
| Reset | 1st of the month, Asia/Ho_Chi_Minh |
| Credentials | at most 3 active per account |
| Credential lifetime | 90 days |
| Mandate issuance | at most 10 exchanges per minute per credential |
The cap is counted per credential, not per account — three credentials give an account three separate caps. The service meters in VND rather than in calls so that per-skill prices can be introduced later without rewriting stored caps.
A credential is not bound to a machine or an IP, so the same key works from another computer — on one shared quota, and one revocation kills both.
Check what a credential has spent, and revoke it:
curl -s https://gateway.datacore.vn/mcp/credentials/<id>/usage -H "token: <token>" | jq .
curl -s https://gateway.datacore.vn/mcp/credentials -H "token: " | jq . curl -X DELETE https://gateway.datacore.vn/mcp/credentials/ -H "token: "
/usage reports spent_vnd, spend_cap_vnd, quota_period and resets_at. Revocation returns 204, and 404 if the id is not yours — the two cases are deliberately indistinguishable.
| Variable | Required | Meaning |
|---|---|---|
DATACORE_A2A_URL | yes | Base URL of the DataCore gateway — https://gateway.datacore.vn, unless you were given your own endpoint |
DATACORE_API_KEY | yes¹ | Long-lived credential, shaped dck_ _ . The server exchanges it for short-lived mandates and refreshes them itself |
DATACORE_MANDATE | yes¹ | A hand-issued AP2 mandate. Only for callers set up the old way — see below |
DATACORE_SKILLS | no | Comma-separated skill ids to narrow the tool list, or * for everything the endpoint returns. Empty uses the default four |
DATACORE_TIMEOUT | no | Per-request timeout in seconds, default 30 |
¹ One of the two is required. If both are set, DATACORE_MANDATE wins.
Use the URL DataCore gave you. A different endpoint will not recognise your credential and answers 401.
DATACORE_API_KEY is the one to useA mandate lives 15 minutes. With DATACORE_API_KEY, the server requests a fresh one a minute before the current one expires, so you never edit a config file because a token ran out. The mandate stays in process memory and is never written anywhere. If a call still comes back 401, the server forces one refresh and retries exactly once before reporting the failure.
DATACORE_MANDATE still works and is never refreshed — it is there for anyone configured before credentials existed. When it expires you replace it by hand and restart the MCP server.
claude mcp add datacore-a2a -s user \
-e DATACORE_A2A_URL=https://gateway.datacore.vn \ -e DATACORE_API_KEY= \ -- datacore-mcp
Replace with the api_key from step 3 — it looks like dck_<8 hex chars>_ .
-s user registers it for every project. Prefer this over a project-scope .mcp.json: that file tends to get committed, and the key is a 90-day bearer credential.
Merge the block below into the config — do not replace the file, it holds your app preferences.
| OS | Config path |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
| Linux | ~/.config/Claude/claude_desktop_config.json |
{
"mcpServers": { "datacore-a2a": { "command": " ", "env": { "DATACORE_A2A_URL": "https://gateway.datacore.vn", "DATACORE_API_KEY": " " } } } }
Both <...> values are yours to fill in — JSON has no comments, so nothing in the file will remind you:
| Placeholder | Where it comes from |
|---|---|
| which datacore-mcp (macOS/Linux) or where datacore-mcp (Windows). Something like /home/you/.local/bin/datacore-mcp or C:\Users\you\AppData\Roaming\Python\Scripts\datacore-mcp.exe |
| the api_key from step 3, shaped dck_<8 hex chars>_ |
It has to be an absolute path: the desktop app does not inherit your shell PATH, so a bare command name usually fails to start. python -m datacore_mcp.server works too. Then quit the app completely — closing the window is not enough.
Logs go to stderr, which the app keeps in the logs/ directory beside that config file.
The tool list is generated from the endpoint, not hardcoded here — so when DataCore adds a skill, restarting the server is enough to see a new tool.
Five skills are exposed by default, the ones wired to a real backend:
| Tool | Skill id | What it does |
|---|---|---|
address_normalize | address.normalize | Normalises a Vietnamese address into province / district / ward |
address_validate | address.validate | Checks an address against administrative data |
company_search | company.search | Looks a company up by name or tax code |
company_graph | company.graph | Returns the company's relationships — representative, province, industry, and anything else the graph holds |
company_embeddings | company.embeddings | Generates an embedding vector for a piece of text |
Every tool takes one required argument, text, a free-text string; no other properties are accepted. Every tool is read-only (readOnlyHint: true): nothing is written, deleted or created, and the same input gives the same result.
DataCore's two other skills (company.financial-sankey, company.news) are deliberately not exposed: they currently return mock/deterministic data. Setting DATACORE_SKILLS="*" lists them as tools, but a free-tier credential cannot call them — its allowlist holds only the five skills above, so every call returns 403. Asking for extra skills when creating a credential is not an error either; the request is silently narrowed to the five.
company.graphused to be on that list. It now reads real relationships, so
a credential created before this release does not include it — the allowed
skills are written into each credential when it is issued. Create a new one to
pick it up.
Three prompts that go through three different tools:
This server carries the mandate verbatim in the X-AP2-Mandate header for DataCore to verify, and declares no authorization header of its own. A client has no business authorizing itself — it forwards what it was given, and every allow or deny decision stays on the DataCore side.
The API key travels in X-Datacore-Credential when exchanged for a mandate, not in Authorization. DataCore's gateway keeps Authorization for itself — it signs and injects that header after authenticating the caller — so any request that arrives carrying one is rejected with 409 and an empty body. If you call /mandate/issue by hand and get a 409 with no message, that is why.
The API key is a bearer credential: whoever holds it can exchange it for a mandate and call the skills it allows until the cap runs out. Treat it like a password — do not commit a filled-in .mcp.json, and if your client supports it, read the key from a secret manager instead of inlining it. If it leaks, revoke it immediately with DELETE /mcp/credentials/ (see Quotas and limits); mandates already issued from it keep working for the rest of their 15 minutes — there is no instant revocation list.
The mandate is the opposite: 15 minutes of life, process memory only. It is not written to disk, never logged, and you should never need to look at it.
Issuance is rate-limited to 10 exchanges per minute per credential, so the endpoint cannot be used to walk the key space. Every rejection — unknown key, revoked key, expired key, wrong secret — returns the same 401 message for the same reason.
This package never logs a token, not even partially, and never logs the text you send. That is a promise about the process running on your machine — the service side is a separate matter, and PRIVACY.md says plainly what it stores.
Logs go to stderr, prefixed [datacore-mcp]. stdout is the JSON-RPC channel.
| S