{"_id":"@dauthau/mcp-dauthau","_rev":"3-7a04737154dfecbeba27357163961ed7","name":"@dauthau/mcp-dauthau","dist-tags":{"latest":"0.1.9"},"versions":{"0.1.2":{"name":"@dauthau/mcp-dauthau","version":"0.1.2","keywords":["mcp","model-context-protocol","dauthau","claude-code","anthropic"],"author":{"name":"DauThau team"},"license":"GPL-2.0-only","_id":"@dauthau/mcp-dauthau@0.1.2","maintainers":[{"name":"thaovinades","email":"thao@vinades.vn"}],"homepage":"https://github.com/vinades/mcp-dauthau#readme","bugs":{"url":"https://github.com/vinades/mcp-dauthau/issues"},"bin":{"mcpdauthau-wrapper":"dist/index.js"},"dist":{"shasum":"c8ea8883cb2ab32d599a1b71d4483c9833ee0459","tarball":"https://registry.npmjs.org/@dauthau/mcp-dauthau/-/mcp-dauthau-0.1.2.tgz","fileCount":21,"integrity":"sha512-D2Bn0BbVd16Yr10sB15WS566q8W+UIfrSnz4KUkNlPVGkXKWOy5unBd9XM0jeO9OJPY0aGUFknaG8Ijv3hqagg==","signatures":[{"sig":"MEQCIFQczzGezWdPOjiEc0bo6UGjWob3uvcnjR/1ii1zEdSYAiAXaAhwDJ7h2qig9/uqTlOirPd78iw8OGWJrDRBbcNfAA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86460},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"gitHead":"83b37b835d98f387486ff09b06c10bc9a6717b9d","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"vitest run","build":"node scripts/copy-assets.mjs && tsc","test:watch":"vitest","prepublishOnly":"npm run lint && npm run test && npm run build"},"_npmUser":{"name":"thaovinades","email":"thao@vinades.vn"},"repository":{"url":"git+ssh://git@github.com/vinades/mcp-dauthau.git","type":"git"},"_npmVersion":"10.9.5","description":"Node.js MCP wrapper kết nối AI tool (Claude Code, Cursor, ...) tới dịch vụ tra cứu đấu thầu DauThau. Apisecret giữ local, ký hashsecret mỗi request.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"bcryptjs":"3.0.3","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.19.3","vitest":"4.1.6","typescript":"5.3.3","@types/node":"20.11.0","@vitest/coverage-v8":"4.1.6"},"_npmOperationalInternal":{"tmp":"tmp/mcp-dauthau_0.1.2_1778992772819_0.23591372182395198","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@dauthau/mcp-dauthau","version":"0.1.8","keywords":["mcp","model-context-protocol","dauthau","claude-code","anthropic"],"author":{"name":"DauThau team"},"license":"GPL-2.0-only","_id":"@dauthau/mcp-dauthau@0.1.8","maintainers":[{"name":"thaovinades","email":"thao@vinades.vn"}],"homepage":"https://github.com/vinades/mcp-dauthau#readme","bugs":{"url":"https://github.com/vinades/mcp-dauthau/issues"},"bin":{"mcpdauthau-wrapper":"dist/index.js"},"dist":{"shasum":"ace889f891100d9832583f9c579339e5ddff547f","tarball":"https://registry.npmjs.org/@dauthau/mcp-dauthau/-/mcp-dauthau-0.1.8.tgz","fileCount":21,"integrity":"sha512-Ik4aP4YTfuysmmigsQUARAeqetUkYHwfiR85I41hQMOKEB/s2H/LYKoT56WL4FZgUzrjhCcn1mJ902aQl6zrTQ==","signatures":[{"sig":"MEUCICNf8Uc5fCLw3ZlCk2CZNLhxaDpACboRt44ebX+BQW87AiEA7QpF7i70OWfDZ1kB68CDEK3XUVBaCDBdPsQKcSOt+Vk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dauthau%2fmcp-dauthau@0.1.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":86460},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"gitHead":"3b7f5b79b9fdaa99929446ac7aec88c419e38fba","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"vitest run","build":"node scripts/copy-assets.mjs && tsc","test:watch":"vitest","prepublishOnly":"npm run lint && npm run test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b618cec6-b521-4cf9-b242-d048cbe8e9fc"}},"repository":{"url":"git+ssh://git@github.com/vinades/mcp-dauthau.git","type":"git"},"_npmVersion":"11.12.1","description":"Node.js MCP wrapper kết nối AI tool (Claude Code, Cursor, ...) tới dịch vụ tra cứu đấu thầu DauThau. Apisecret giữ local, ký hashsecret mỗi request.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"bcryptjs":"3.0.3","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.19.3","vitest":"4.1.6","typescript":"5.3.3","@types/node":"20.11.0","@vitest/coverage-v8":"4.1.6"},"_npmOperationalInternal":{"tmp":"tmp/mcp-dauthau_0.1.8_1778996331852_0.7082827378782137","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@dauthau/mcp-dauthau","version":"0.1.9","description":"Node.js MCP wrapper kết nối AI tool (Claude Code, Cursor, ...) tới dịch vụ tra cứu đấu thầu DauThau. Apisecret giữ local, ký hashsecret mỗi request.","type":"module","bin":{"mcpdauthau-wrapper":"dist/index.js"},"main":"./dist/index.js","types":"./dist/index.d.ts","scripts":{"build":"node scripts/copy-assets.mjs && tsc","dev":"tsx src/index.ts","test":"vitest run","test:watch":"vitest","lint":"tsc --noEmit","prepublishOnly":"npm run lint && npm run test && npm run build"},"keywords":["mcp","model-context-protocol","dauthau","claude-code","anthropic"],"author":{"name":"DauThau team"},"license":"GPL-2.0-only","repository":{"type":"git","url":"git+ssh://git@github.com/vinades/mcp-dauthau.git"},"engines":{"node":">=22.0.0"},"dependencies":{"@modelcontextprotocol/sdk":"1.29.0","bcryptjs":"3.0.3"},"devDependencies":{"@types/node":"20.11.0","@vitest/coverage-v8":"4.1.6","tsx":"4.19.3","typescript":"5.3.3","vitest":"4.1.6"},"gitHead":"fedb7f6b820919866251c82174f1bb201038360b","_id":"@dauthau/mcp-dauthau@0.1.9","bugs":{"url":"https://github.com/vinades/mcp-dauthau/issues"},"homepage":"https://github.com/vinades/mcp-dauthau#readme","_nodeVersion":"24.15.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-bgUbKuMNyzGca7zbF9qzF27+6ijWgvTwwhNyLj09COFPcF6+6WBi2GLd6vxAIHe5rDZBiWUH1GL697ceZy8LDg==","shasum":"801dd8634dc66e82001f6c52b2d529bb43153c6a","tarball":"https://registry.npmjs.org/@dauthau/mcp-dauthau/-/mcp-dauthau-0.1.9.tgz","fileCount":21,"unpackedSize":86802,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dauthau%2fmcp-dauthau@0.1.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD1r/gYMhGJf7x0MTdXR4afQBbO6sS3+zZ1d7ig/DTSyAIgK3SFkFlPd6GM8mv3Mscz43KjnOF95/EIfriUQHYlc2A="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b618cec6-b521-4cf9-b242-d048cbe8e9fc"}},"directories":{},"maintainers":[{"name":"thaovinades","email":"thao@vinades.vn"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp-dauthau_0.1.9_1779008956643_0.2165970073431085"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-17T04:39:32.693Z","modified":"2026-05-17T09:09:17.151Z","0.1.2":"2026-05-17T04:39:32.975Z","0.1.8":"2026-05-17T05:38:52.013Z","0.1.9":"2026-05-17T09:09:16.783Z"},"bugs":{"url":"https://github.com/vinades/mcp-dauthau/issues"},"author":{"name":"DauThau team"},"license":"GPL-2.0-only","homepage":"https://github.com/vinades/mcp-dauthau#readme","keywords":["mcp","model-context-protocol","dauthau","claude-code","anthropic"],"repository":{"type":"git","url":"git+ssh://git@github.com/vinades/mcp-dauthau.git"},"description":"Node.js MCP wrapper kết nối AI tool (Claude Code, Cursor, ...) tới dịch vụ tra cứu đấu thầu DauThau. Apisecret giữ local, ký hashsecret mỗi request.","maintainers":[{"name":"thaovinades","email":"thao@vinades.vn"}],"readme":"# @dauthau/mcp-dauthau\n\nNode.js wrapper kết nối AI tool (Claude Code, Cursor, Antigravity, Windsurf...) với dịch vụ tra cứu **đấu thầu công Việt Nam** của DauThau qua giao thức [Model Context Protocol](https://modelcontextprotocol.io/).\n\nWrapper chạy stdio trên máy bạn, ký request local rồi forward HTTPS lên gateway. **Apisecret KHÔNG bao giờ rời máy bạn.**\n\n[![npm version](https://img.shields.io/npm/v/@dauthau/mcp-dauthau.svg)](https://www.npmjs.com/package/@dauthau/mcp-dauthau)\n[![Node.js Version](https://img.shields.io/node/v/@dauthau/mcp-dauthau.svg)](https://nodejs.org/)\n[![License: GPL v2](https://img.shields.io/badge/License-GPL%20v2-blue.svg)](LICENSE)\n\n---\n\n## Tính năng\n\n- 🔐 **Apisecret giữ local** — wrapper ký `hashsecret` per-request bằng `node:crypto` (md5) hoặc `bcrypt`, chỉ gửi chữ ký qua mạng.\n- ⚡ **Zero-install** — chạy qua `npx -y @dauthau/mcp-dauthau@latest`, không cài cố định, auto-update.\n- 🧩 **Pass-through proxy động** — danh sách tool query từ gateway mỗi session. Khi backend mở rộng tool, bạn KHÔNG cần update wrapper.\n- 🛡️ **Tối thiểu dependency** — chỉ 1 runtime dependency (`@modelcontextprotocol/sdk`) + Node stdlib. Mỗi release publish với npm [provenance](https://docs.npmjs.com/generating-provenance-statements) SLSA.\n- 🌍 **Cross-platform** — Node.js ≥ 22 trên macOS / Linux / Windows. CI test cả 3 OS × 3 Node version.\n\n---\n\n## Yêu cầu\n\n- **Node.js >= 22** (LTS). Tải tại https://nodejs.org/\n- Tài khoản DauThau với apikey + apisecret (đăng ký tại https://dauthau.info).\n- MCP gateway key — liên hệ DauThau để được cấp.\n\n---\n\n## Cài đặt\n\nKHÔNG cần `npm install`. Dùng trực tiếp qua `npx`.\n\n### Config `.mcp.json` cho Claude Code / Cursor / Windsurf\n\n```json\n{\n  \"mcpServers\": {\n    \"dauthau\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@dauthau/mcp-dauthau@latest\"],\n      \"env\": {\n        \"DAUTHAU_APIKEY\":    \"<apikey-cua-ban>\",\n        \"DAUTHAU_APISECRET\": \"<apisecret-cua-ban>\",\n        \"DAUTHAU_METHOD\": \"md5_verify\",\n        \"MCP_GATEWAY_URL\":   \"<url-gateway-duoc-cap>\",\n        \"MCP_GATEWAY_KEY\":   \"<gateway-key-duoc-cap>\"\n      }\n    }\n  }\n}\n```\n\nSau khi config, restart MCP client (Claude Code / Cursor) để nạp wrapper. AI assistant sẽ tự discover danh sách tool và bắt đầu dùng được.\n\n### Vị trí `.mcp.json` theo client\n\n| Client | Đường dẫn |\n|---|---|\n| Claude Code | `.mcp.json` trong project root, hoặc `~/.claude.json` (global) |\n| Cursor | `~/.cursor/mcp.json` |\n| Windsurf | `~/.codeium/windsurf/mcp_config.json` |\n| Antigravity | xem doc client tương ứng |\n\n---\n\n## Biến môi trường\n\n### Bắt buộc\n\n| Env | Mô tả |\n|---|---|\n| `DAUTHAU_APIKEY` | Apikey từ tài khoản DauThau của bạn |\n| `DAUTHAU_APISECRET` | Apisecret tương ứng (giữ local, dùng để ký hashsecret) |\n| `MCP_GATEWAY_URL` | URL endpoint gateway (DauThau cấp khi đăng ký) |\n| `MCP_GATEWAY_KEY` | Gateway subscription key (DauThau cấp) |\n\n### Tuỳ chọn\n\n| Env | Default | Mô tả |\n|---|---|---|\n| `DAUTHAU_METHOD` | `password_verify` | Phương thức xác thực chữ ký: `password_verify` (mặc định, dùng bcrypt) hoặc `md5_verify` (dùng md5). |\n| `LOG_LEVEL` | `info` | `debug` / `info` / `warn` / `error` — log ra **stderr** (stdout dành cho MCP framing). |\n| `MCP_GATEWAY_TIMEOUT_MS` | `30000` | Timeout HTTPS request lên gateway, range 1000-120000. |\n\n---\n\n## Bảo mật\n\n- **Apisecret KHÔNG bao giờ gửi qua mạng.** Wrapper ký `hashsecret = md5(apisecret + \"_\" + timestamp)` local, chỉ gửi `hashsecret` + `timestamp` (Unix seconds) qua header.\n- Wrapper **KHÔNG log** giá trị nhạy cảm: apikey, apisecret, hashsecret, gateway key, raw body. Log chỉ chứa: tool name, latency, status, error message.\n- Mọi credential giữ trong RAM scope process — KHÔNG persist ra disk/cache.\n- Mỗi request 1 timestamp mới + 1 hashsecret mới — chống replay attack (gateway verify skew window phía server).\n\n### Lưu ý\n\n- Khi bạn paste apisecret vào `.mcp.json`, file đó phải được bảo vệ (chmod 600 trên Unix, ACL hạn chế trên Windows). KHÔNG commit `.mcp.json` chứa apisecret lên git.\n- Cold-start `npx` lần đầu mỗi session khoảng 200-500ms để tải package vào cache. Sau đó session sau dùng cache local.\n\n---\n\n## Troubleshooting\n\n### `Thiếu env: DAUTHAU_APIKEY, ...`\n\nKiểm tra block `env` trong `.mcp.json` đã có đủ 4 biến bắt buộc. Restart MCP client sau khi sửa.\n\n### `Node.js >= 22 required`\n\nWrapper yêu cầu Node 22+ (LTS). Cài LTS mới nhất tại https://nodejs.org/.\n\n### `gateway timeout sau 30000ms`\n\nMạng chậm hoặc gateway tạm thời không phản hồi. Tăng timeout qua `MCP_GATEWAY_TIMEOUT_MS=60000` hoặc kiểm tra kết nối internet.\n\n### Clock skew (lỗi liên quan timestamp)\n\nĐồng hồ máy lệch so với server > 60s. Sync NTP:\n\n- **macOS / Linux:** `sudo sntp -sS time.google.com` hoặc `sudo timedatectl set-ntp on`\n- **Windows:** mở PowerShell admin, chạy `w32tm /resync`\n\n### Kiểm tra wrapper trước khi tin tưởng\n\n```bash\nnpx -y @dauthau/mcp-dauthau@latest --version\nnpx -y @dauthau/mcp-dauthau@latest --help\n```\n\n---\n\n## Phát triển local\n\n```bash\ngit clone https://github.com/vinades/mcp-dauthau.git\ncd mcp-dauthau\nnpm install\nnpm run lint       # tsc --noEmit\nnpm test           # vitest unit + integration mock\nnpm run build      # tsc → dist/\nnode dist/index.js --version\n```\n\nRoadmap chi tiết theo Phase: [docs/Plan.md](docs/Plan.md).\nQuy ước code và mental model: [CLAUDE.md](CLAUDE.md).\nHướng dẫn publish npm: [PUBLISH.md](docs/PUBLISH.md).\n\n### Đóng góp\n\nPull request và issue đều welcome. Trước khi PR:\n\n1. Đảm bảo `npm run lint && npm test` pass.\n2. Thêm test cho code mới (vitest, mục tiêu coverage ≥ 85% cho module core).\n3. KHÔNG commit `.env`, key thật, hoặc thông tin nhạy cảm.\n4. Mô tả PR ngắn gọn, đính kèm test plan.\n\nBáo cáo lỗ hổng bảo mật: vui lòng dùng [GitHub Security Advisory](../../security/advisories/new) (private) trước khi public disclosure.\n\n---\n\n## Liên kết\n\n- [Model Context Protocol](https://modelcontextprotocol.io/) — chuẩn giao thức Anthropic phát triển.\n- [@modelcontextprotocol/sdk](https://www.npmjs.com/package/@modelcontextprotocol/sdk) — TypeScript SDK chính chủ.\n- [DauThau](https://dauthau.info) — dịch vụ tra cứu đấu thầu công Việt Nam.\n\n---\n\n## License\n\nGNU General Public License v2.0\n","readmeFilename":"README.md"}