cisp-mcp
# cisp-mcp
`cisp-mcp` 是一个用 Python 编写的 CISP API MCP 服务,用于把 CISP 企业信息接口封装成可被大模型调用的 MCP tools。
项目使用 `uv` 管理依赖,基于 `mcp` Python SDK 的 `FastMCP` 开发,通过 CISP AI 网关 JSON 接口访问后端 API。
## 项目能力
- 支持 Claude Code、Codex、Codex App、OpenClaw、WorkBuddy 等 MCP 客户端接入。
- 每个 CISP 产品接口对应一个独立 MCP tool,工具名包含产品号,方便排查和定位。
- 自动补充 `prodCode`,调用方只需要传业务参数。
- 对 CISP 返回结果做统一归一化,保留原始返回 `raw_response`。
- Streamable HTTP 模式支持每个客户使用自己的 CISP API Key,便于后端按 Key 计费。
- 支持本地 smoke test,验证 MCP 服务和工具注册是否正常。
## 技术栈
- Python `>=3.11`
- uv
- MCP Python SDK / FastMCP
- httpx
- python-dotenv
## 运行环境要求
推荐本机提前安装:
- Python `3.11` 或更高版本
- uv
`uv` 可以管理 Python 版本;如果本机没有符合要求的 Python,`uv` 在部分环境下可以自动下载和管理。但在企业内网、代理或离线环境中,自动下载可能失败,因此建议提前安装好 Python `3.11+`。
## 生产部署
CentOS 7 联网构建、离线包制作、生产部署、升级、回滚和新增依赖的完整流程,请参阅:
- [CISP MCP CentOS 7 离线生产部署与运维手册](OPERATIONS_CENTOS7.md)
## 项目结构
```text
cisp-mcp/
├── src/cisp_mcp/
│ ├── server.py # MCP tool 定义和服务入口
│ ├── client.py # CISP JSON 网关客户端
│ ├── config.py # 环境变量配置
│ └── interfaces.py # 产品码、接口名称、状态码等定义
├── scripts/
│ └── smoke_test_mcp.py
├── docs/ # 本地接口文档目录
├── .env.example
├── pyproject.toml
└── README.md
```
## 快速开始
### 1. 下载项目
```bash
git clone <your-github-repo-url>
cd cisp-mcp
```
如果是在已有目录:
```bash
cd /path/to/cisp-mcp
```
### 2. 检查 Python 和 uv
检查 Python:
```bash
python3 --version
```
检查 uv:
```bash
uv --version
```
如果没有安装 uv,可以按 uv 官方方式安装,或使用本机已有的 Python 环境安装。
### 3. 安装依赖
```bash
uv sync
```
### 4. 配置环境变量(本地 stdio 模式)
复制模板:
```bash
cp .env.example .env
```
编辑 `.env`:
```text
CISP_ENDPOINT=https://cisp.zenitera.com
CISP_REQUEST_URI=/ectcispserver/api/entcreditapi/query
# 可选;配置后仅 CISP 出站请求使用该代理
# CISP_ENDPOINT_PROXY=http://proxy.example.internal:8080
CISP_API_KEY=替换成真实 API Key
CISP_TIMEOUT_SECONDS=30
CISP_VERIFY_SSL=true
```
`CISP_API_KEY` 只用于本地 stdio 模式。生产 Streamable HTTP 模式不在服务器保存统一 Key,而是要求每个客户发送:
```http
Authorization: Bearer <客户自己的CISP_API_KEY>
```
服务会将当前请求的 Bearer Token转换为调用 CISP 后台所需的:
```http
X-API-Key: <客户自己的CISP_API_KEY>
```
如果访问 `CISP_ENDPOINT` 必须经过代理,配置:
```ini
CISP_ENDPOINT_PROXY=http://proxy.example.internal:8080
```
也支持 `socks5://` 代理。未配置或配置为空时,CISP 请求直接连接目标地址;程序不会继承系统的 `HTTP_PROXY`、`HTTPS_PROXY` 或 `ALL_PROXY`,避免实际路由与配置不一致。
## 本地运行和调试
### smoke test
这个测试验证 MCP 服务能否启动、无 Bearer Key是否返回 `401`、不同客户能否隔离 MCP Session,以及 `tools/list` 是否能看到所有工具。它不会调用真实 CISP API,也不会消耗接口次数。
```bash
uv run python scripts/smoke_test_mcp.py
```
正常结果类似:
```text
Discovered MCP tools:
- p0010010_query_business_profile
- p0010058_query_business_basic_deep
...
- query_cisp_product
Total: 37
Smoke test passed.
```
### stdio 模式
stdio 是给 Claude Code、Codex、OpenClaw、WorkBuddy 等 MCP 客户端使用的模式。
```bash
uv run cisp-mcp
```
手动执行时终端会停住,这是正常现象。stdio 模式通过标准输入/输出和 MCP 客户端通信,不会像 Web 服务一样打印访问地址。
### HTTP 调试模式
如果要用 MCP Inspector 调试,可以启动 Streamable HTTP:
```bash
uv run cisp-mcp --transport streamable-http
```
默认地址:
```text
http://127.0.0.1:8000/mcp
```
然后启动 Inspector:
```bash
npx -y @modelcontextprotocol/inspector
```
在 Inspector 中选择:
```text
Transport: Streamable HTTP
URL: http://127.0.0.1:8000/mcp
Authorization: Bearer <测试用CISP_API_KEY>
```
## 工具列表
| 产品码 | 接口名称 | MCP tool |
| --- | --- | --- |
| `P0010010` | 企业工商照面信息查询 | `p0010010_query_business_profile` |
| `P0010058` | 企业工商基本信息查询(深度) | `p0010058_query_business_basic_deep` |
| `P0010059` | 企业工商基本信息查询(简项) | `p0010059_query_business_basic_brief` |
| `P0010068` | 企业名称模糊查询(简版) | `p0010068_fuzzy_search_company_name` |
| `P0010073` | 企业商标信息查询 | `p0010073_query_trademark_info` |
| `P0010074` | 企业软件著作权信息查询 | `p0010074_query_software_copyright_info` |
| `P0010075` | 企业作品著作权信息查询 | `p0010075_query_work_copyright_info` |
| `P0010076` | 企业 ICP 备案信息查询 | `p0010076_query_icp_filing_info` |
| `P0010078` | 企业专利信息查询 | `p0010078_query_patent_info` |
| `P0010084` | 企业许可信息查询 | `p0010084_query_license_info` |
| `P0020014` | 企业疑似关系信息查询 | `p0020014_query_suspected_relationships` |
| `P0020019` | 企业疑似实际控制人信息查询 | `p0020019_query_suspected_controller` |
| `P0020021` | 企业单点关联信息查询 | `p0020021_query_single_point_related_info` |
| `P0020023` | 企业股权穿透信息查询 | `p0020023_query_equity_penetration` |
| `P0020024` | 企业受益股东详细查询 | `p0020024_query_beneficial_shareholders_detailed` |
| `P0020031` | 企业多点关联信息查询 | `p0020031_query_multi_point_relationships` |
| `P0020044` | 企业间关联关系查询 | `p0020044_query_intercompany_relationship` |
| `P0020129` | 企业实控人和最终受益人查询 | `p0020129_query_controller_and_ubo` |
| `P0050007` | 企业舆情信息列表查询 | `p0050007_query_public_opinion_list` |
| `P0050008` | 企业舆情信息详情查询 | `p0050008_query_public_opinion_detail` |
| `P0050007+P0050008` | 企业舆情信息查询(列表+详情) | `p0050007_p0050008_query_public_opinion_info` |
| `P0060007` | 企业工商二要素验证 | `p0060007_verify_business_two_elements` |
| `P0060008` | 企业工商三要素验证 | `p0060008_verify_business_three_elements` |
| `P0090001` / `P0090012` | 企业最终受益人信息查询(详版/非详版) | `p0090001_p0090012_query_ubo` |
| `P0090008` | 企业实际控制人信息查询 | `p0090008_query_actual_controller` |
| `P0090011` | 企业最终受益人信息查询-全路径版 | `p0090011_query_ubo_full_paths` |
| `P0110003` | 企业荣誉资质信息查询 | `p0110003_query_honor_qualification_info` |
| `P0130025` | 企业关键指标信息查询 | `p0130025_query_company_key_indicators` |
| `P0130036` | 企业土地信息查询 | `p0130036_query_land_info` |
| `P0130038` | 企业画像-行业分析 | `p0130038_query_industry_analysis` |
| `P0210004` | 上市公司财务数据查询 | `p0210004_query_listed_company_financial_data` |
| `P0980006` | 企业高级筛选 | `p0980006_query_advanced_company_filter` |
| `P0980008` | 纳税评级 | `p0980008_query_tax_rating` |
| `P0980023` | 光大-近2年风险分析统计 | `p0980023_query_two_year_risk_summary` |
| `P0980033` | 上市投融资招投标知识产权情况 | `p0980033_query_listing_financing_bidding_ipr` |
| `P0990022` | 供应商关联关系 | `p0990022_query_supplier_relationships` |
| 通用 | CISP JSON 网关调试查询 | `query_cisp_product` |
### 返回结构
专用工具会返回归一化字段和原始响应:
- `product_code`:产品码
- `interface_name`:接口名称
- `success`:`resultCode == "00000"`
- `has_result`:产品状态码为 `4`
- `result_code_desc`:结果码说明
- `product_status_desc`:产品状态说明
- `data`:产品数据对象
- `raw_response`:CISP 原始返回
如果产品数据里存在常用列表字段,也会额外透出快捷字段,例如:
- `basicList`
- `fuzzyList`
- `brandList`
- `swList`
- `resultList`
- `icpList`
- `patentsList`
- `detailList`(`P0010084`、`P0130036`)
- `suspectList`
- `controlNodeList`
- `entInvList`
- `nodeList`(`P0020024`)
- `nodes`
- `relationship`
- `dataList`
- `finalList`(`P0090001`、`P0090012`)
- `actualController`(`P0090008`)
- `MatchInfoList`
- `infoList`
- `infoDetail`
- `matchList`
- `itemNameList`
- `coreLndicatorInfo`(`P0130025`,字段名沿用底层接口原始拼写)
- `suppList`(`P0990022`)
- `entList`(`P0980006`)
- `list`(`P0980008`、`P0980023`)
- `data`(`P0980033`)
`P0210004` 会根据 `financial_type` 在 `data` 中填充对应列表:
`rgincomeInfo`、`rgcashflowInfo`、`fncmfninInfo`、`rgbalanceInfo`、
`mainfinadataInfo`、`balanceInfo`、`incomeInfo` 或 `cashflowInfo`。
## 调用示例
### 查询工商照面信息
```json
{
"ent_info": "证通股份有限公司"
}
```
对应工具:
```text
p0010010_query_business_profile
```
### 查询深度工商信息
```json
{
"ent_name": "证通股份有限公司"
}
```
对应工具:
```text
p0010058_query_business_basic_deep
```
### 查询简项工商信息
`ent_name`、`credit_code`、`reg_no`、`org_code` 严格四选一;`types` 用于选择需要返回的数据类型。
```json
{
"ent_name": "证通股份有限公司",
"types": ["basic", "person", "shareholder"]
}
```
对应工具:
```text
p0010059_query_business_basic_brief
```
### 查询企业受益股东详细信息
`ent_info` 支持企业全称或统一社会信用代码。结果通过 `nodeList` 快捷字段返回;
`benifitTag` 是底层接口原始拼写,可包含“受益股东”“最终受益人”或“实际控制人”。
```json
{
"ent_info": "证通股份有限公司"
}
```
对应工具:
```text
p0020024_query_beneficial_shareholders_detailed
```
### 查询企业实际控制人
`ent_name` 支持企业全称、统一社会信用代码或工商注册号。结果通过
`actualController` 快捷字段返回,包含实际控制人、产品聚合股权占比和控制路径。
```json
{
"ent_name": "证通股份有限公司"
}
```
对应工具:
```text
p0090008_query_actual_controller
```
### 查询企业最终受益人(详版/非详版统一入口)
AI 应按任务目的选择 `edition`:完整报告、审计留档或关键管理人员兜底使用
`detailed`;快速识别、独立互证或需要 `bnfCat` 判定依据使用 `standard`。
非详版可将 `include_paths` 设为 `false`,只返回最终受益人。
```json
{
"ent_name": "证通股份有限公司",
"edition": "detailed",
"include_paths": true
}
```
对应工具:
```text
p0090001_p0090012_query_ubo
```
### 企业高级筛选
```json
{
"eid": "可选的 CISP 企业内部标识",
"area_prefix": "44",
"org_scale": "大型",
"page_no": "1",
"page_size": "10"
}
```
对应工具:
```text
p0980006_query_advanced_company_filter
```
### 查询上市、投融资、招投标和知识产权概况
```json
{
"ent_info": "证通股份有限公司"
}
```
对应工具:
```text
p0980033_query_listing_financing_bidding_ipr
```
### 查询纳税评级
`eid` 是 CISP 企业内部标识。如果只有企业名称,应先调用
`p0010010_query_business_profile`,从企业名称准确匹配的
`basicList[].entId` 获取,并将其作为 `eid` 传入。不要根据统一社会信用代码自行推算
`eid`。企业高级筛选查询成功时,也可以使用其返回的 `entList[].eid`。
```json
{
"ent_info": "证通股份有限公司"
}
```
```json
{
"eid": "替换成 p0010010 返回的 basicList[].entId"
}
```
对应工具:
```text
p0980008_query_tax_rating
```
### 查询近2年风险分析统计
如果只有企业名称,先调用 `p0010010_query_business_profile`,从企业名称准确匹配的
`basicList[].entId` 获取企业内部标识。不要自行构造或推算 `eid`。
```json
{
"eid": "替换成 p0010010 返回的 basicList[].entId"
}
```
对应工具:
```text
p0980023_query_two_year_risk_summary
```
### 查询专利信息
```json
{
"ent_info": "证通股份有限公司",
"page_no": "1",
"page_size": "10"
}
```
对应工具:
```text
p0010078_query_patent_info
```
### 查询企业投资和任职关联信息
用户只需要描述查询意图,模型会选择对应的 `relation_direction`:
- `"1"`:同时查询投资和任职关系
- `"2"`:只查询投资关系
- `"3"`:只查询任职关系
```json
{
"ent_info": "证通股份有限公司",
"relation_direction": "2"
}
```
对应工具:
```text
p0020021_query_single_point_related_info
```
### 查询企业荣誉资质
```json
{
"ent_info": "证通股份有限公司"
}
```
对应工具:
```text
p0110003_query_honor_qualification_info
```
### 查询企业关键指标
```json
{
"ent_info": "证通股份有限公司",
"indicator_type": "2"
}
```
`indicator_type` 可选值:
- `"1"`:指标等级,默认值
- `"2"`:指标金额
结果列表通过 `coreLndicatorInfo` 快捷字段返回,包含报告年份、资产总额、负债总额、
所有者权益、营业收入、主营业务收入、利润、纳税、从业人数和社保人数等年报关键指标。
对应工具:
```text
p0130025_query_company_key_indicators
```
### 查询企业土地信息
```json
{
"ent_info": "证通股份有限公司",
"land_type": "tddy",
"page_no": "1",
"page_size": "10"
}
```
`land_type` 可选值:`tdgy`(土地供应)、`tdcr`(土地出让)、`dkgs`(地块公示)、`tddy`(土地抵押)。不传时由底层产品决定返回范围。
对应工具:
```text
p0130036_query_land_info
```
### 查询企业画像行业分析
```json
{
"ent_info": "证通股份有限公司",
"analysis_type": "property",
"nic_lvl": "n3",
"region_lvl": "r2",
"region_id": "440300",
"nic_id": "C391"
}
```
`analysis_type` 可选值:`finRank`、`finRankStock`、`entRegionRank`、`locfin`、`indLocOpr`、`indLocOprFin`、`property`、`financialRegionRank`。不同类型的结果字段不同,统一从返回的 `data` 中读取。
对应工具:
```text
p0130038_query_industry_analysis
```
### 查询上市公司财务数据
```json
{
"ent_info": "证通股份有限公司",
"financial_type": "mainfinadata",
"start_date": "2024-01-01",
"end_date": "2025-12-31"
}
```
`financial_type` 可选值:
- `rgincome`:通用类利润
- `rgcashflow`:通用类现金流量
- `fncmfnin`:金融公司主要财务指标
- `rgbalance`:通用类资产负债
- `mainfinadata`:主要会计数据和财务指标
- `balance`:一般企业资产负债
- `income`:一般企业利润
- `cashflow`:一般企业现金流量
`start_date`、`end_date` 可选,格式为 `YYYY-MM-DD`。不同类型的结果列表位于
返回值的 `data` 对应 `*Info` 字段中。
对应工具:
```text
p0210004_query_listed_company_financial_data
```
### 查询供应商关联关系
```json
{
"ent_info": "证通股份有限公司"
}
```
对应工具:
```text
p0990022_query_supplier_relationships
```
### 查询企业许可
```json
{
"ent_info": "证通股份有限公司",
"license_type": "ylxk",
"province": "广东省",
"page_no": "1",
"page_size": "10"
}
```
对应工具:
```text
p0010084_query_license_info
```
### 查询企业舆情信息
```json
{
"ent_name": ["证通股份有限公司", "水滴科技服务有限公司"],
"page_no": "1",
"page_size": "10",
"max_details": 10
}
```
对应工具:
```text
p0050007_p0050008_query_public_opinion_info
```
说明:该工具会先调用 `P0050007` 查询舆情列表,再用列表返回的 `entryId` 和用户传入的 `ent_name` 调用 `P0050008` 查询舆情详情。
### 只查询企业舆情列表
```json
{
"ent_name": ["证通股份有限公司", "水滴科技服务有限公司"],
"page_no": "1",
"page_size": "10"
}
```
对应工具:
```text
p0050007_query_public_opinion_list
```
### 查询企业舆情详情
```json
{
"entry_id": "替换成舆情列表返回的 entryId"
}
```
对应工具:
```text
p0050008_query_public_opinion_detail
```
如果只传 `ent_name`,服务会先查询该企业第一页舆情列表,再取第一条 `entryId` 查询详情。
### 二要素验证
```json
{
"ent_name": "证通股份有限公司",
"reg_no": "替换成真实统一社会信用代码"
}
```
对应工具:
```text
p0060007_verify_business_two_elements
```
## 集成到 Claude Code
生产环境使用远程 Streamable HTTP。在启动 Claude Code 的环境中设置客户自己的 Key:
```bash
export CISP_API_KEY='<客户自己的CISP_API_KEY>'
```
项目级 `.mcp.json`:
```json
{
"mcpServers": {
"cisp-mcp": {
"type": "http",
"url": "https://mcp.example.com/mcp",
"headers": {
"Authorization": "Bearer ${CISP_API_KEY}"
}
}
}
}
```
本地开发也可以使用 stdio 模式,让 Claude Code 自动启动 MCP 服务;此时 Key来自项目 `.env`:
```bash
claude mcp add --transport stdio --scope user cisp-mcp -- uv --directory /path/to/cisp-mcp run cisp-mcp
```
检查配置:
```bash
claude mcp list
claude mcp get cisp-mcp
```
进入 Claude Code 后输入:
```text
/mcp
```
看到 `cisp-mcp` connected 后即可使用。
示例问题:
```text
查询一下证通股份有限公司的工商照面信息。
查询一下证通股份有限公司的专利信息。
帮我从工商信息、知识产权、网站备案几个角度快速了解证通股份有限公司。
```
## 集成到 Codex CLI / Codex App
Codex CLI 和 Codex App 使用同一份 MCP 配置。生产远程服务配置如下:
```toml
[mcp_servers.cisp-mcp]
url = "https://mcp.example.com/mcp"
bearer_token_env_var = "CISP_API_KEY"
startup_timeout_sec = 20
tool_timeout_sec = 120
enabled = true
```
启动 Codex 前设置:
```bash
export CISP_API_KEY='<客户自己的CISP_API_KEY>'
```
本地开发可以使用 stdio 模式:
```bash
codex mcp add cisp-mcp -- uv --directory /path/to/cisp-mcp run cisp-mcp
```
检查配置:
```bash
codex mcp list
codex mcp get cisp-mcp
```
配置会写入:
```text
~/.codex/config.toml
```
对应的本地手动配置:
```toml
[mcp_servers.cisp-mcp]
command = "uv"
args = ["--directory", "/path/to/cisp-mcp", "run", "cisp-mcp"]
startup_timeout_sec = 20
tool_timeout_sec = 120
enabled = true
```
配置后重新打开 Codex App,或新建一个 thread,在 Codex 中输入:
```text
/mcp
```
确认 `cisp-mcp` 已连接。
## 集成到 OpenClaw(小龙虾)
OpenClaw 可以通过 `openclaw mcp set` 保存 MCP Server 定义。推荐使用 stdio 模式,让 OpenClaw 在需要时启动 `cisp-mcp`。
### 本地项目方式
先确保项目目录下已经配置好 `.env`,然后执行:
```bash
openclaw mcp set cisp-mcp '{"command":"uv","args":["--directory","/path/to/cisp-mcp","run","cisp-mcp"]}'
```
检查配置:
```bash
openclaw mcp list
openclaw mcp show cisp-mcp --json
```
如果 OpenClaw Gateway 已经在运行,保存 MCP 配置后建议重启 Gateway 或新建会话:
```bash
openclaw gateway restart
```
### 直接配置环境变量
如果不想依赖项目目录下的 `.env`,也可以把运行所需环境变量写入 OpenClaw MCP 配置:
```bash
openclaw mcp set cisp-mcp '{"command":"uv","args":["--directory","/path/to/cisp-mcp","run","cisp-mcp"],"env":{"CISP_ENDPOINT":"https://cisp.zenitera.com","CISP_REQUEST_URI":"/ectcispserver/api/entcreditapi/query","CISP_API_KEY":"填写自己的真实 API Key","CISP_TIMEOUT_SECONDS":"30","CISP_VERIFY_SSL":"true"}}'
```
### 直接从 GitHub 运行
如果不想本地 clone 项目,可以使用 `uvx` 从 GitHub 运行:
```bash
openclaw mcp set cisp-mcp '{"command":"uvx","args":["--from","git+https://github.com/fw-magic/cisp-mcp.git","cisp-mcp"],"env":{"CISP_ENDPOINT":"https://cisp.zenitera.com","CISP_REQUEST_URI":"/ectcispserver/api/entcreditapi/query","CISP_API_KEY":"填写自己的真实 API Key","CISP_TIMEOUT_SECONDS":"30","CISP_VERIFY_SSL":"true"}}'
```
配置完成后,可以在 OpenClaw 中直接提问:
```text
查询一下证通股份有限公司的工商照面信息。
查询证通股份有限公司和水滴科技服务有限公司的舆情信息。
```
## 集成到 WorkBuddy
生产环境进入“连接器 → 自定义连接器 → 配置 MCP”,填写:
```json
{
"mcpServers": {
"cisp-mcp": {
"type": "streamable-http",
"url": "https://mcp.example.com/mcp",
"headers": {
"Authorization": "Bearer <客户自己的CISP_API_KEY>"
},
"disabled": false
}
}
}
```
WorkBuddy 未明确支持环境变量展开时,应使用其凭据输入框或直接填写 Key,不要填写字面量 `${CISP_API_KEY}`。
本地开发且 WorkBuddy 支持 stdio server 时,可以配置:
```json
{
"mcpServers": {
"cisp-mcp": {
"command": "uv",
"args": [
"--directory",
"/path/to/cisp-mcp",
"run",
"cisp-mcp"
]
}
}
}
```
本地 HTTP 调试可以先手动启动:
```bash
uv run cisp-mcp --transport streamable-http
```
然后在 WorkBuddy 中配置 URL 和请求头:
```text
URL: http://127.0.0.1:8000/mcp
Authorization: Bearer <客户自己的CISP_API_KEY>
```
## 新增接口开发流程
后续如果要新增 CISP 产品接口:
1. 把 PDF 接口文档放到本地 `docs/` 目录。
2. 阅读基本信息、请求参数、返回字段和附录状态码。
3. 在 `src/cisp_mcp/interfaces.py` 中新增产品定义。
4. 在 `src/cisp_mcp/server.py` 中新增一个 `@mcp.tool()`。
5. 工具名格式建议为:`p产品号_英文语义名`,例如 `p0010010_query_business_profile`。
6. 更新 `scripts/smoke_test_mcp.py` 的 `EXPECTED_TOOLS`。
7. 运行 smoke test:
```bash
uv run python scripts/smoke_test_mcp.py
```
## 常见问题
### 1. 手动运行 `uv run cisp-mcp` 后终端不动,是不是卡住了?
不是。默认 stdio 模式会等待 MCP 客户端通过标准输入/输出通信,手动运行时看起来像停住。调试时请用:
```bash
uv run cisp-mcp --transport streamable-http
```
### 2. 真实调用报证书错误怎么办?
本地联调时可以临时设置:
```text
CISP_VERIFY_SSL=false
```
生产环境建议保持:
```text
CISP_VERIFY_SSL=true
```
## 安全说明
- 不要提交 `.env`。
- Streamable HTTP 生产入口必须使用 HTTPS。
- 不要在代码、README、日志或聊天消息中写入 API Key。
- Claude Code、Codex 优先通过环境变量管理 Key;WorkBuddy 优先使用凭据管理界面。
- Nginx 和应用日志不得记录 `Authorization` 或转发给 CISP 的 `X-API-Key`。
- HTTP 模式下每个请求都必须携带 Bearer Key;缺失或格式错误时返回 `401`。
- MCP 服务只做 Bearer格式校验;格式正确但已失效的 Key会在实际调用 CISP 时由 CISP 后台拒绝。
- 代理账号密码属于敏感信息;如果 `CISP_ENDPOINT_PROXY` 包含凭据,不得提交 Git或打印到日志。
TDQS
Scored across 14 tools
Each tool targets a distinct type of business information (profile, basic deep, fuzzy search, trademark, copyrights, ICP, patent, public opinion list/detail, verification, and generic fallback). There is no overlap; even the public opinion tools are split into list and detail, which is clear.
Most tools follow a pattern of numeric prefix + verb_noun (e.g., p0010010_query_business_profile), but the last tool 'query_cisp_product' lacks the numeric prefix, breaking consistency. Additionally, verbs vary (query, fuzzy_search, verify), though that is common.
14 tools cover a wide range of business information queries (basic, intellectual property, public opinion, verification) without being excessive. The count is well-scoped for a specialized business data server.
The toolset covers major business information categories (profile, IP, ICP, public opinion, verification). Minor gaps like financial data or legal records exist, but the generic 'query_cisp_product' tool serves as a fallback, mitigating incompleteness.