ak-mcp
ak-mcp:AKShare 金融数据 MCP Server
ak-mcp 是一个基于 Model Context Protocol(MCP)的金融数据查询服务,
以 AKShare 为数据源,把官方数据字典中收录的 1000+ 个数据接口自动注册为
MCP 工具,供 Claude、Codex、Cursor 等 Agent 直接发现和调用。查询结果默认写入 MySQL 本地缓存,
缓存命中时不再访问远程数据源,显著降低网络依赖与延迟。
特性
遵循最新 MCP 协议:基于官方 Python SDK v2(
mcp>=2.0),实现 2026-07-28 修订版协议,并自动兼容 2025-11-25 及更早版本的客户端;同一服务同时支持 stdio 与 Streamable HTTP 两种传输。全量接口覆盖:接口清单直接由官方文档(https://akshare.akfamily.xyz/data/ )生成,当前收录 1019 个接口,覆盖股票、期货、债券、期权、外汇、货币、现货、利率、私募/公募基金、指数、宏观、 加密货币、银行、能源、另类数据、工具箱、指标计算等全部大类。
缓存优先:MySQL 缓存命中即返回;未命中才回源 AKShare 并写回缓存;回源失败时自动返回过期数据并标记
stale: true。按分类 TTL:实时行情、日频历史、宏观指标、静态字典分别使用不同缓存有效期,支持按函数覆盖。
原生参数 Schema:每个工具的参数由 AKShare 函数签名自动生成(必填/可选、类型、默认值),Agent 可直接按文档参数调用,无需额外学习封装格式。
运维友好:内置接口检索、缓存统计、缓存清理、健康检查、绕过缓存直查等元工具。
架构
flowchart LR
A[Agent 客户端<br/>Claude / Codex / Cursor] -->|stdio 或 Streamable HTTP| M[MCP Server<br/>mcp>=2, 2026-07-28]
M --> T[1000+ 个数据工具<br/>工具名 = AKShare 函数名]
T --> E[执行器<br/>超时 / 参数过滤 / 结果规范化]
E --> C{MySQL 缓存<br/>ak_cache}
C -->|命中且未过期| R[返回 JSON]
C -->|未命中或过期| K[AKShare]
K --> C
K --> D[新浪 / 东财 / 交易所等数据源]
M --> Meta[元工具<br/>检索 / 统计 / 清理 / 健康]目录结构
ak-mcp/
├── src/ak_mcp/ # 服务端核心代码
│ ├── server.py # MCP 服务装配与工具注册
│ ├── registry.py # 文档接口清单加载与安装包匹配
│ ├── schema.py # 函数签名 -> JSON Schema
│ ├── executor.py # 线程池调用、超时、参数过滤
│ ├── normalize.py # DataFrame -> JSON 规范化
│ ├── cache.py # MySQL 缓存(SQLAlchemy)
│ ├── ttl.py # TTL 规则引擎
│ ├── config.py # 环境变量配置
│ └── cli.py # 命令行入口
├── scripts/
│ ├── build_registry.py # 抓取官方文档生成接口清单
│ └── init_db.sql # MySQL 初始化 SQL
├── config/
│ ├── akshare_registry.json # 官方文档接口清单(已生成,1019 个)
│ └── ttl_rules.yaml # 缓存 TTL 规则
├── tests/ # 单元与集成测试
├── docker-compose.yml # MySQL 8 本地环境
├── pyproject.toml
└── Makefile环境要求
Python 3.11+(建议 3.11/3.12/3.13)
MySQL 8.0+(可用项目自带 Docker Compose)
AKShare 官方要求 64 位操作系统
快速开始
1. 安装
make install # 创建 .venv 并安装依赖(等价于 pip install -e ".[dev]")2. 启动 MySQL
方式一(推荐):使用项目自带 Docker Compose:
make mysql-up # docker compose up -d mysql,映射标准 3306 端口方式二:使用已有 MySQL,手动执行初始化:
mysql -uroot -p < scripts/init_db.sql3. 配置
cp .env.example .env按需修改 .env。默认配置对应项目自带的 MySQL 容器:
MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
MYSQL_USER=ak_mcp
MYSQL_PASSWORD=ak_mcp_password
MYSQL_DB=ak_mcp所有配置项见 .env.example。
4. 生成接口清单(可选)
仓库已提交 config/akshare_registry.json(对应官方文档 1.18.94),通常无需重新生成。如需同步最新文档:
make registry5. 启动服务
stdio 模式(供桌面客户端本地调用):
ak-mcp
# 或 .venv/bin/ak-mcpStreamable HTTP 模式(供远程/多客户端调用):
ak-mcp --transport http --host 127.0.0.1 --port 8765其他命令:
ak-mcp --list-functions # 打印全部文档接口
ak-mcp --refresh-registry # 重新抓取官方文档并更新清单
ak-mcp --verbose # 调试日志QuickStart:Agent 接入
Claude Desktop
编辑 claude_desktop_config.json(Claude Desktop 的 MCP 配置):
{
"mcpServers": {
"ak-mcp": {
"command": "/absolute/path/to/ak-mcp/.venv/bin/ak-mcp",
"env": {
"MYSQL_HOST": "127.0.0.1",
"MYSQL_PORT": "3306",
"MYSQL_USER": "ak_mcp",
"MYSQL_PASSWORD": "ak_mcp_password",
"MYSQL_DB": "ak_mcp"
}
}
}
}保存后重启 Claude Desktop,即可在对话中直接使用 stock_zh_a_hist、fund_open_fund_info_em、
macro_china_cpi_yearly 等全部数据工具。
Codex
在 ~/.codex/config.toml 中追加:
[mcp_servers.ak-mcp]
command = "/absolute/path/to/ak-mcp/.venv/bin/ak-mcp"
env = { MYSQL_HOST = "127.0.0.1", MYSQL_PORT = "3306", MYSQL_USER = "ak_mcp", MYSQL_PASSWORD = "ak_mcp_password", MYSQL_DB = "ak_mcp" }也可以使用 Codex CLI 的 MCP 添加命令(具体语法以当前 Codex 版本 codex mcp --help 为准)。
通用 MCP 客户端(HTTP)
先启动 HTTP 模式:
ak-mcp --transport http --host 127.0.0.1 --port 8765然后在支持 URL 的 MCP 客户端中配置:
{
"mcpServers": {
"ak-mcp": {
"url": "http://127.0.0.1:8765/mcp"
}
}
}使用示例
查询 A 股历史行情
Agent 直接调用工具 stock_zh_a_hist,参数与 AKShare 官方文档一致:
stock_zh_a_hist(symbol="000001", period="daily", start_date="20260801", end_date="20260826", adjust="")返回 JSON:
{
"data": [
{
"日期": "2026-08-03",
"开盘": 10.38,
"收盘": 10.47,
"最高": 10.59,
"最低": 10.32,
"成交量": 886273
}
],
"meta": {
"function": "stock_zh_a_hist",
"params": { "symbol": "000001", "period": "daily" },
"cached": true,
"stale": false,
"rows": 18,
"elapsed_ms": 2,
"truncated": false
}
}定位接口
不确定接口名时,先调用 ak_search_functions:
ak_search_functions(query="可转债 实时行情")
ak_search_functions(category="macro")运维元工具
工具 | 说明 |
| 按关键词/分类检索接口清单 |
| 缓存统计:条数、过期数、行数、字节数、Top 函数 |
| 清理指定函数/参数或全部缓存 |
| 服务健康、协议版本、接口数、缓存状态 |
| 绕过缓存直查 AKShare(用于强制刷新) |
接口清单机制
scripts/build_registry.py抓取官方文档data/目录下所有页面的 Markdown 源文件,解析接口:xxx、描述:xxx与输入参数表,生成config/akshare_registry.json。服务启动时以该清单为唯一来源:清单中收录、且已安装 akshare 中存在的接口,逐一注册为 MCP 工具。
清单有而安装包缺失的接口会跳过并告警(例如文档先于版本发布时);可用
AKSHARE_REQUIRE_VERSION_MATCH=true强制版本一致。
缓存机制
缓存优先流程
按
函数名 + 规范化参数 + akshare 版本计算 SHA-256 缓存键。命中且未过期:直接返回缓存 JSON(
meta.cached = true)。未命中或过期:调用 AKShare 回源,规范化后写回 MySQL。
回源失败:若存在过期数据,返回旧数据并标记
meta.stale = true;否则返回错误文本。
表结构(ak_cache)
服务启动时通过 SQLAlchemy 自动建表,也可参考 scripts/init_db.sql 手工创建:
字段 | 说明 |
| SHA-256 缓存键(唯一) |
| AKShare 函数名 |
| 规范化参数 |
| 结果数据(LONGTEXT) |
| 数据行数 |
| 本次缓存有效期 |
| 时间戳 |
| 回源耗时 |
| 数据版本 |
TTL 规则
规则定义在 config/ttl_rules.yaml,按顺序匹配、先命中先生效:
规则 | 匹配 | 默认 TTL |
实时行情 |
| 60s |
日频历史 |
| 6h |
宏观利率 | 分类 | 12h |
静态字典 |
| 7d |
其他 | 兜底 | 1h(可用 |
配置项
环境变量 | 默认值 | 说明 |
| 由拆分变量拼装 | 完整 SQLAlchemy DSN,优先级最高 |
| 见 | MySQL 连接拆分变量 |
|
| 关闭后直连 AKShare 不缓存 |
|
| MySQL 不可用时降级为无缓存运行 |
|
| 兜底 TTL(秒) |
|
| TTL 规则文件 |
|
| 单次返回最大行数,超出截断 |
|
| 单次 AKShare 调用超时(秒) |
|
| 接口清单路径 |
|
| 版本不匹配时启动失败 |
| 空 | 排除的接口名正则(逗号分隔) |
开发与测试
make test # 运行全部测试(单元 + MCP 内存集成)
make lint # ruff 检查
make fmt # ruff 格式化测试覆盖:文档解析、Schema 生成、TTL 分类、参数规范化、缓存键、SQLite 缓存行为、MCP 内存模式下的 工具注册/调用/错误处理。真实网络与 MySQL 的集成验证可通过本地 Docker Compose 手动执行 (参见上文“端到端验证”)。
常见问题
启动时提示某接口未找到:Registry function not found in installed akshare: xxx
表示官方文档先于当前安装的 akshare 版本发布,该接口会被跳过,不影响其他接口;升级 akshare
或重新生成清单即可。
MySQL 连接失败:确认 .env 端口与 docker compose ps 显示的一致(本项目容器直接映射
标准端口 3306);也可以设置 AK_CACHE_ALLOW_DEGRADED=true 临时以无缓存模式启动。
数据源接口报错:AKShare 部分接口依赖第三方网站(新浪、东财等),可能受网络、风控或字段变更影响;
可通过 ak_execute_raw 绕过缓存复现,或升级 akshare 版本。
时区与编码:缓存时间统一为 UTC;数据写入与读取使用 UTF-8/utf8mb4,中文列名可直接返回。
安全与生产建议
v1 面向本地与内网,未内置鉴权与限流;生产环境建议置于网关之后(OAuth/API Key、速率限制)。
缓存为所有 Agent 共享,不区分用户;涉及敏感场景请自行增加隔离。
HTTP 模式对外暴露时,建议仅监听内网地址,或通过反向代理添加 TLS。
License
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Provide access to Chinese stock market data including historical prices, real-time data, news, and…
The financial MCP for AI agents - 90+ financial tables, SEC filings, signals, alt-data.
Access real-time and historical market data for China A-shares and Hong Kong stocks, along with ne…
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Vaskka/akmcp-local'
If you have feedback or need assistance with the MCP directory API, please join our Discord server