Skip to main content
Glama
README.md
# china-mcp-servers

MCP servers for Chinese services that didn't have one.

While compiling [awesome-china-mcp](https://github.com/zackchewa/awesome-china-mcp) we found 88 widely-used Chinese services with a documented official API and no maintained MCP server anywhere. This repo starts working through that list. Round one picks the three where you can get a credential yourself in five minutes — or need none at all.

| Server | What your agent can do | Credential |
|---|---|---|
| `holiday` | Is this date a day off in mainland China? Statutory holiday, 调休 makeup workday, weekend or ordinary workday — plus a whole year at once | none |
| `serverchan` | Push a notification to your own WeChat (Server酱) | free, self-serve |
| `baidu-translate` | Translate text between 20+ languages (Baidu Translate 标准版) | free tier, self-serve |

## Try it in ten seconds

The holiday server needs no signup, no key, nothing:

```bash
npx -y github:zackchewa/china-mcp-servers holiday
```

Then point any MCP client at it:

```jsonc
{
  "mcpServers": {
    "china-holiday": {
      "command": "npx",
      "args": ["-y", "github:zackchewa/china-mcp-servers", "holiday"]
    }
  }
}
```

Ask your agent "is 2026-10-01 a working day in China?" and it will answer 国庆节, day off. Ask about a 调休 Sunday and it will correctly tell you that you're working.

Works with Claude Desktop, Cursor, Cline, VS Code, [OpenClaw](https://github.com/openclaw/openclaw), Hermes, Cherry Studio, or anything else that speaks MCP over stdio.

Not on npm yet, so these run straight from the repo; npm publish will shorten the command to `npx -y china-mcp-servers <server>`.

## The servers

### `holiday` — 中国法定节假日 / 调休

Two tools: `holiday_check_date` (defaults to today in China time) and `holiday_list_year`.

Anything that schedules work in China needs this, because a weekend check is not enough — the 调休 system makes some Saturdays and Sundays mandatory working days to pay for a long holiday. A naive calendar gets those exactly backwards.

Data comes from [NateScarlet/holiday-cn](https://github.com/NateScarlet/holiday-cn), a maintained JSON mirror of the State Council's published 放假安排, cached 12 hours in memory.

Why not timor.tech, the API most tutorials use: it sits behind a Cloudflare challenge that blocks non-CN server egress. The two GitHub CDNs used here answer from anywhere, and the second is tried if the first fails.

### `serverchan` — push to your own WeChat

One tool: `serverchan_send` (title required, `desp` is Markdown).

This gives an agent a way to reach you rather than waiting to be asked — cron results, alerts, "the deploy finished". Messages go to your own WeChat only.

Get a SendKey free at [sct.ftqq.com](https://sct.ftqq.com) — scan-login with WeChat, copy the key:

```jsonc
{
  "mcpServers": {
    "serverchan": {
      "command": "npx",
      "args": ["-y", "github:zackchewa/china-mcp-servers", "serverchan"],
      "env": { "SERVERCHAN_SENDKEY": "SCT..." }
    }
  }
}
```

Both live key formats are handled automatically, which is the part that usually breaks: Turbo keys (`SCT…`) post to `sctapi.ftqq.com`, while Server³ keys (`sctp<uid>t…`) post to `<uid>.push.ft07.com`, where the uid is the digit run inside your own key. Send the second kind to the first host and you get a confusing 404.

### `baidu-translate` — 百度翻译

One tool: `baidu_translate` (`from` defaults to auto-detect, `to` defaults to Chinese).

The 标准版 tier is genuinely free (50k characters/month) and has a 暂不认证 path, so you can get working credentials at [fanyi-api.baidu.com](https://fanyi-api.baidu.com) without ID verification.

```jsonc
{
  "mcpServers": {
    "baidu-translate": {
      "command": "npx",
      "args": ["-y", "github:zackchewa/china-mcp-servers", "baidu-translate"],
      "env": {
        "BAIDU_TRANSLATE_APPID": "your-appid",
        "BAIDU_TRANSLATE_SECRET": "your-secret"
      }
    }
  }
}
```

Two traps are handled for you. The signature is `MD5(appid + q + salt + secret)` over the raw UTF-8 text — sign the URL-encoded form instead and you get error 54001, which is the single most common complaint about this API. And the per-call limit is 6000 bytes, not characters, so Chinese input hits it at roughly 2000 characters; this bounds on bytes and tells you to split.

## What is actually verified

Being specific, because "works" is easy to claim:

- `holiday` is verified end to end over real MCP stdio against the live dataset — handshake, `tools/list`, and `tools/call` returning 国庆节 for 2026-10-01.
- All three servers are verified over real MCP stdio for handshake and tool listing, and the credentialed two return a clear, actionable error when their environment variable is absent rather than hanging or crashing.
- Request construction and error mapping are covered by 21 unit tests over mocked HTTP, including the signature-over-raw-text rule, the byte-length bound, both SendKey host formats, SendKey redaction from errors, the CDN fallback, and the refusal to cache a wrong-year holiday payload.
- The logic in all three is ported from adapters that run in production at [OpenClaw Launch](https://openclawlaunch.com), so the API contracts are proven in real use. What has not happened is a live upstream call from this package for the two credentialed servers — that needs your own keys, and this repo ships without any.

## Contributing

The 88-row gap list in [awesome-china-mcp](https://github.com/zackchewa/awesome-china-mcp#gap-map) is the roadmap. If you want to add a server, the ones worth doing first are the ones whose credentials an ordinary developer can actually obtain — an enterprise-only API makes a server almost nobody can run.

House rules, all learned the hard way:

- Fix the host. No user-supplied base URLs, and refuse redirects.
- Bound every input, and bound text on bytes when the upstream limit is in bytes.
- Redact credentials from every error path, especially when the credential rides in a URL.
- Treat a business-level failure as a failure even when HTTP says 200. Chinese APIs very often return `{"code": 40001}` with a 200.
- Say what a tool cannot do. A read-only server that claims to write wastes everyone's time.

## Related

- [awesome-china-mcp](https://github.com/zackchewa/awesome-china-mcp) — the index these came out of: MCP servers for Chinese apps, official first, plus the gap list.
- If you'd rather not self-host, [OpenClaw Launch](https://openclawlaunch.com/zh/china-apps) runs a hosted version of these and about a hundred more Chinese app connections.

## License

MIT