DataCore A2A

Registre officiel Outils de développement

Normalise Vietnamese addresses and look up companies by name or tax code, through DataCore A2A.

Installation

Ajoutez ceci à la configuration MCP de votre client (Claude Desktop : claude_desktop_config.json ; Cursor : .cursor/mcp.json ; VS Code et les autres utilisent la même forme « mcpServers »).

PYPI package datacore-a2a-mcp
Claude Code
claude mcp add datacore-a2a -e 'DATACORE_A2A_URL=<DATACORE_A2A_URL>' -e 'DATACORE_API_KEY=<your datacore_api_key>' -e 'DATACORE_MANDATE=<your datacore_mandate>' -e 'DATACORE_SKILLS=<DATACORE_SKILLS>' -e 'DATACORE_TIMEOUT=<DATACORE_TIMEOUT>' -- uvx datacore-a2a-mcp==0.2.5
Configuration JSON (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "datacore-a2a": {
            "command": "uvx",
            "args": [
                "datacore-a2a-mcp==0.2.5"
            ],
            "env": {
                "DATACORE_A2A_URL": "<DATACORE_A2A_URL>",
                "DATACORE_API_KEY": "<your datacore_api_key>",
                "DATACORE_MANDATE": "<your datacore_mandate>",
                "DATACORE_SKILLS": "<DATACORE_SKILLS>",
                "DATACORE_TIMEOUT": "<DATACORE_TIMEOUT>"
            }
        }
    }
}

Variables d'environnement

  • DATACORE_A2A_URL obligatoire Base URL of the DataCore gateway, for example https://gateway.datacore.vn. It must be the gateway — pointing straight at the orchestrator is always rejected with 401.
  • DATACORE_API_KEY secret Long-lived credential shaped dck_..., created with POST /mcp/credentials — see the README. The server exchanges it for short-lived mandates and refreshes them itself, so it never has to be replaced on expiry. Either this or DATACORE_MANDATE is required.
  • DATACORE_MANDATE secret A hand-issued AP2 mandate, the older way. Not refreshed: when it expires you replace it and restart. Use it only if you were set up this way; otherwise use DATACORE_API_KEY.
  • DATACORE_SKILLS Comma-separated skill ids to narrow the tools that get exposed, or * for every skill the endpoint returns. Empty uses the default four.
  • DATACORE_TIMEOUT Per-request timeout in seconds. Defaults to 30.

Documentation

Tirée du README du projet sur GitHub, actualisée chaque semaine. Les liens ouvrent GitHub.

Sommaire
  1. DataCore A2A — MCP server
  2. Bắt đầu
  3. Hạn mức
  4. Cấu hình
  5. Tool
  6. Ví dụ
  7. Mô hình bảo mật
  8. Xử lý sự cố
  9. Báo lỗi bảo mật
  10. Quyền riêng tư
  11. License

DataCore A2A — MCP server

Cho phép một MCP client (Claude Code, Claude Desktop, VS Code, Cursor…) dùng các skill dữ liệu của DataCore như tool native: chuẩn hoá địa chỉ Việt Nam, kiểm tra địa chỉ, tra cứu doanh nghiệp, sinh embedding.

MCP client (stdio) ──► datacore-mcp ──HTTPS──► DataCore API

Zero dependency, Python 3.9+.

Bắt đầu

Server này là client, không phải dịch vụ. Nó cần một endpoint DataCore và một API key để gọi. Thiếu một trong hai thì nó khởi động rồi thoát ngay, kèm thông báo thiếu biến nào.

Cần một tài khoản trên datacore.vn trước.

1. Cài
pip install git+https://github.com/DataCore-VietNam/datacore-a2a-mcp.git

Bản PyPI đang trên đường. Khi có, lệnh sẽ là pip install datacore-a2a-mcp. Ai cài từ GitHub thì lúc đó cần gỡ rồi cài lại — --upgrade không tự chuyển nguồn.

2. Lấy token
curl -s -X POST https://gateway.datacore.vn/auth/login \
  -H 'Content-Type: application/json' \
  -d '{"username":"<user>","password":"<pass>"}' | jq -r '.data.token'

Chuỗi 64 ký tự. Phản hồi còn có .data.jwt — không dùng cái đó.

3. Tạo credential
curl -s -X POST https://gateway.datacore.vn/mcp/credentials \
  -H "token: <token 64 ky tu>" \
  -H 'Content-Type: application/json' \
  -d '{"name":"claude-code"}' | jq .

Chép lại api_key ngay — nó chỉ hiện đúng một lần. Dịch vụ chỉ lưu bản băm, không có cách nào đọc lại. Mất thì tạo cái mới.

4. Khai báo — xem Cấu hình bên dưới

Chưa có giao diện web cho bước 2–3; làm bằng curl như trên. Khi có trang quản lý, các lệnh này vẫn chạy.

Hạn mức

Gói miễn phí~1.000 lượt gọi mỗi tháng, reset đầu tháng (giờ Việt Nam)
Số credentialtối đa 3 mỗi tài khoản
Hạn credential90 ngày

Xem đã dùng bao nhiêu, và thu hồi:

curl -s  https://gateway.datacore.vn/mcp/credentials/<id>/usage -H "token: <token>" | jq .
curl -X DELETE https://gateway.datacore.vn/mcp/credentials/<id> -H "token: <token>"

Cấu hình

BiếnBắt buộcÝ nghĩa
DATACORE_A2A_URLcóBase URL gateway DataCore — https://gateway.datacore.vn, trừ khi bạn được cấp endpoint riêng
DATACORE_API_KEYcó¹Credential dài hạn dạng dck_.... Server tự đổi nó lấy mandate ngắn hạn và tự gia hạn
DATACORE_MANDATEcó¹Mandate AP2 phát tay. Chỉ dùng nếu bạn được cấp theo cách cũ — xem ghi chú bên dưới
DATACORE_SKILLSkhôngDanh sách skill id cách nhau bằng phẩy để giới hạn tool, hoặc * để lấy hết. Bỏ trống dùng mặc định
DATACORE_TIMEOUTkhôngTimeout mỗi request (giây), mặc định 30

¹ Cần một trong hai. Có cả hai thì DATACORE_MANDATE được ưu tiên.

Dùng đúng URL DataCore cấp. Một endpoint khác sẽ không nhận credential của bạn và trả 401.

Vì sao nên dùng DATACORE_API_KEY

Mandate chỉ sống vài phút. Với DATACORE_API_KEY, server tự xin mandate mới trước khi cái đang giữ hết hạn, nên bạn không bao giờ phải sửa file cấu hình vì token hết hạn. Mandate chỉ nằm trong bộ nhớ tiến trình và không bao giờ được ghi ra đâu cả.

DATACORE_MANDATE vẫn dùng được và không bị tự gia hạn — giữ lại cho những ai đã cấu hình theo cách cũ. Hết hạn là phải tự thay rồi khởi động lại MCP server.

Claude Code / Claude Desktop

Thêm vào .mcp.json (project) hoặc config của Claude Desktop:

{
  "mcpServers": {
    "datacore-a2a": {
      "command": "datacore-mcp",
      "env": {
        "DATACORE_A2A_URL": "https://gateway.datacore.vn",
        "DATACORE_API_KEY": "dck_<prefix>_<secret>"
      }
    }
  }
}

Tool

Tool list được sinh từ endpoint, không hardcode ở đây — nên khi DataCore thêm skill, restart server là thấy tool mới.

Mặc định expose 4 skill đã nối backend thật:

ToolSkill idViệc nó làm
address_normalizeaddress.normalizeChuẩn hoá địa chỉ Việt Nam thành tỉnh / huyện / xã
address_validateaddress.validateKiểm tra một địa chỉ có tồn tại theo dữ liệu hành chính
company_searchcompany.searchTra cứu doanh nghiệp theo tên hoặc mã số thuế
company_embeddingscompany.embeddingsSinh vector embedding cho văn bản

Mọi tool là read-only (readOnlyHint: true): không ghi, không xoá, không tạo gì. Gọi lại cùng input cho cùng kết quả.

Ba skill khác của DataCore (company.graph, company.financial-sankey, company.news) cố ý không được expose: chúng đang trả dữ liệu mock/deterministic. Muốn thấy chúng để thử thì đặt DATACORE_SKILLS="*", và đừng tin kết quả.

Ví dụ

Ba prompt dưới đây chạy qua ba tool khác nhau:

  1. Chuẩn hoá địa chỉ — "Chuẩn hoá địa chỉ này thành tỉnh/huyện/xã: So 1 Ly Thai To, Hoan Kiem, Ha Noi"
  2. Tra cứu doanh nghiệp — "Tìm thông tin doanh nghiệp có mã số thuế 0100109106 và cho tôi biết trạng thái hoạt động"
  3. Embedding — "Sinh embedding cho đoạn mô tả ngành nghề này rồi cho biết vector có bao nhiêu chiều: bán buôn thiết bị điện tử"

Mô hình bảo mật

Server này mang mandate nguyên dạng ở header X-AP2-Mandate để phía DataCore verify, và không tự khai bất kỳ header authorization nào khác. Một client không được là nơi tự cấp quyền cho chính nó — nó chỉ chuyển tiếp thứ nó được cấp, còn mọi quyết định cho phép hay từ chối đều nằm ở phía DataCore.

API key đi trong X-Datacore-Credential khi đổi lấy mandate, không phải Authorization. Gateway của DataCore dành riêng Authorization cho chính nó — nó tự ký và tự chèn header đó sau khi xác thực người gọi — nên request nào gửi sẵn Authorization bị trả 409 với body rỗng. Nếu bạn gọi /mandate/issue bằng tay và nhận 409 không có thông báo gì, đó là lý do.

API key là bearer credential: ai giữ nó cũng đổi được ra mandate, và từ đó gọi được đúng những skill trong đó tới hết hạn mức. Giữ nó như giữ mật khẩu — đừng commit .mcp.json đã điền key, và nếu client của bạn hỗ trợ, đọc nó từ trình quản lý secret thay vì để inline. Lỡ lộ thì thu hồi ngay bằng DELETE /mcp/credentials/<id> (xem Hạn mức); mandate đã phát ra từ nó vẫn chạy nốt vài phút còn lại rồi chết — không có danh sách thu hồi tức thì.

Mandate thì ngược lại: nó chỉ sống vài phút và chỉ nằm trong bộ nhớ tiến trình. Nó không được ghi ra đĩa, không vào log, và bạn không cần nhìn thấy nó bao giờ.

Package này không bao giờ ghi token ra log, kể cả một phần; nội dung text bạn gửi cũng không. Đó là cam kết cho tiến trình chạy trên máy bạn — phía dịch vụ là chuyện khác, và PRIVACY.md nói thẳng nó lưu những gì.

Xử lý sự cố

Log đi ra stderr, prefix [datacore-mcp]. stdout là kênh JSON-RPC.

Triệu chứngNguyên nhân thường gặp
Server thoát ngay, THIẾU biến môi trường bắt buộcChưa set DATACORE_A2A_URL
Server thoát ngay, THIẾU xác thựcChưa set DATACORE_API_KEY (hoặc DATACORE_MANDATE)
401 mọi requestCredential bị thu hồi, hoặc đã quá 90 ngày, hoặc DATACORE_A2A_URL không phải endpoint đã cấp credential đó. Dùng DATACORE_MANDATE: mandate hết hạn và nó không tự gia hạn. Một thông báo duy nhất cho cả ba — cố ý, để endpoint không thành công cụ dò key. Cách phân biệt: gọi GET /mcp/credentials xem credential còn ACTIVE không
409 khi tự gọi /mandate/issueBạn gửi key trong Authorization. Phải là X-Datacore-Credential — xem Mô hình bảo mật. Package tự làm đúng; lỗi này chỉ gặp khi gọi tay
402Đã dùng hết hạn mức của tháng này. Hạn mức tự reset đầu tháng sau
403Skill nằm ngoài allowlist của credential — tạo credential mới có skill đó
502Backend của skill đó phía DataCore không phản hồi
Không thấy tool nàoDATACORE_SKILLS lọc hết, hoặc endpoint chưa đăng ký skill nào

Báo lỗi bảo mật

mcp-security@datacore.vn. Đừng mở issue công khai cho lỗi bảo mật.

Nghi mandate của mình bị lộ thì báo ngay — đừng đợi tới lúc nó hết hạn. Chúng tôi cần biết để xử lý phía dịch vụ.

Quyền riêng tư

Xem PRIVACY.md. Ngắn gọn: package này chạy trên máy bạn, không lưu gì, không gửi đi đâu ngoài endpoint DataCore bạn tự cấu hình, và không bao giờ ghi mandate token vào log.

License

MIT — xem LICENSE.

Questions fréquentes

Qu'est-ce que DataCore A2A ?

Normalise Vietnamese addresses and look up companies by name or tax code, through DataCore A2A.

Comment installer DataCore A2A ?

Il s'exécute sur votre machine. Dans Claude Code : claude mcp add datacore-a2a -e 'DATACORE_A2A_URL=<DATACORE_A2A_URL>' -e 'DATACORE_API_KEY=<your datacore_api_key>' -e 'DATACORE_MANDATE=<your datacore_mandate>' -e 'DATACORE_SKILLS=<DATACORE_SKILLS>' -e 'DATACORE_TIMEOUT=<DATACORE_TIMEOUT>' -- uvx datacore-a2a-mcp==0.2.5. Pour les autres clients, collez la configuration JSON de cette page dans leurs réglages MCP.

Faut-il une clé API pour DataCore A2A ?

Oui. Il attend DATACORE_A2A_URL, DATACORE_API_KEY, DATACORE_MANDATE, à renseigner dans sa configuration.

DataCore A2A est-il open source ?

Oui. Son code est sur GitHub sous licence MIT.

Qui maintient DataCore A2A ?

Il est publié par DataCore-VietNam. AI.tn le référence sans le maintenir ni le recommander.

Issu du registre MCP officiel. Être listé n'est pas une recommandation : vérifiez le code et les permissions d'un serveur avant de lui donner accès à vos données.