JINGDATA DATA SERVICE · MCP

鲸准 MCP Server 使用说明

鲸准投融资数据以 Model Context Protocol 标准服务的形式对外开放。接入后,AI 助手与应用可直接检索覆盖 交易事件、创业项目、企业工商、投资机构、基金与 LP、产业链 等 17 个数据索引,用自然语言完成投融资数据问答与分析。

Streamable HTTP Bearer Token 17 个数据索引

01概览

鲸准 MCP Server 是鲸准数据面向 AI 应用提供的 MCP 服务。它把鲸准的投融资数据库封装为标准 MCP 工具,任何支持 MCP 协议的客户端接入后即可直接查询。

数据索引
17个
交易、项目、公司、机构、基金、LP、行业赛道、产业链
工具
6个
列索引 / 看字段 / 执行查询 / 读字典 / 查节点企业 / 查企业产业链
查询语言
ES DSL
标准 Elasticsearch 查询语法
单页上限
10条
超出请使用 from 参数分页

1.1 能力边界

先明确这个服务能做什么、不能做什么,可以避免把时间花在走不通的路上。

维度说明
能做按任意条件检索 17 个索引的原始明细记录,支持深分页(用 from 翻页)。
不能做分组统计、聚合排序、一次取回大批量数据 —— 受「单页 10 条」与「不支持聚合」两项限制。
适合明细查询、对话式问答、指标核对、单条或小批量取数。
不适合批量导出全量数据、行业宏观报表、依赖服务端聚合的统计分析。
统计类需求可以先看现成字段

部分索引已内置预计算好的统计值,例如 jingdata_industry_v2 的 project_num(该标签下项目数)、 com_count(企业数),以及 jingdata_industry_chain 的 com_count、listed_count 等。 这类需求直接读字段即可,不需要也不应该自行聚合。

1.2 数据覆盖

  • 投融资交易事件 —— 投资方、被投方、交易时间、融资轮次、金额、行业、地区、业务标签
  • 创业项目与企业工商 —— 项目档案、简介、工商注册、注册资本、经营状态
  • 机构与基金 —— 投资机构、基金、基金管理人、基金对外投资记录
  • LP 数据 —— 出资人基本信息与对外投资记录
  • 行业与赛道 —— 行业标签维表(含项目数与热度)、一级 / 二级市场热门赛道
  • 产业链 —— 节点结构与企业归属关系、节点 × 地区经营统计、财务分析、估值序列、市场涨跌幅

1.3 我要查什么 → 用哪个索引

17 个索引按数据主题分为交易与项目、机构与基金、LP 数据、行业与赛道、产业链五类。 下表按常见业务问题给出入口,点击索引名可直达其字段结构。

我想查…用哪个索引关键字段与注意点
某天的投融资 / 并购事件 jingdata_large_transaction finance_date 时间范围 + finance_phase 轮次;不支持聚合,需分页自行累计
某赛道 / 关键词下的创业项目 jingdata_project 细分领域走 tags_v2(nested);一级行业用 industry_v2.id
某企业的工商信息 / 简介 / 注册资本 jingdata_company name 用 match;字段随记录变化,不少企业无简介或融资信息
某产业链节点下的企业(可按地区筛) searchCompaniesByChainNode
产业链专用工具
传节点 ID 即可,地区支持省 / 市 / 县任意层级。详见 产业链专节
某节点在全国 / 某地的企业数与经营指标 jingdata_industry_chain chain_id + level(此处 level 是地理粒度)
某节点的估值与市场表现趋势 …_evolution_analysis 用 code 区分沪深300与行业个股两条序列,不要混读
某机构的基本信息 / 投资案例 jingdata_org / jingdata_investment 基金对外投资记录已由服务端强制注入过滤条件,直接查业务条件即可
某基金 / 基金管理人的备案信息 jingdata_fund / …_fund_manager 部分编码字段暂未开放字典,见 字段字典
某 LP 的出资与对外投资 jingdata_lp_info / …_lp_invest_info 基本信息与投资记录分属两个索引,配合使用
行业标签、赛道热度与排行 jingdata_industry_v2 / …_track 维表已内置项目数、热度等统计值,直接读字段
产业链有哪些节点、层级怎么分 …_chain_particulars 查企业的第一步,chain_id 是全局唯一的节点 ID
本服务的定位:数据查询

服务提供的是原始数据检索能力,不提供聚合统计与可视化。所有统计分析需要在调用方完成(详见使用限制)。

数据与凭证

接入范围与数据使用方式以双方约定为准。访问令牌仅限申请方在约定的服务端环境内使用,请勿公开或转授予第三方。

02快速开始

2.1 接入信息

项目值
服务端点https://mcp.jingdata.com/sse
传输方式Streamable HTTP(向 /sse 发送 POST 请求)
认证方式HTTP 请求头 Authorization: Bearer <TOKEN>
请求 / 响应JSON-RPC 2.0
字符编码UTF-8
端点路径是 /sse,但传输方式是 Streamable HTTP —— 这是最容易踩的坑

必须使用 POST 方法发送 JSON-RPC 请求。直接对 /sse 发起 GET 会返回 400。部分 MCP 客户端需要在配置中显式指定传输类型为 http / streamable-http,否则会按经典 SSE 处理导致连接失败。

认证

所有请求都必须在请求头携带访问令牌。令牌请向鲸准对接人申请,请勿将令牌写入前端代码或公开仓库。

令牌安全

缺少或令牌无效时,服务返回 HTTP 401 与 {"code": -32001, "message": "Missing or invalid Authorization header"}。请在服务端保存并转发令牌,避免在浏览器 / 客户端明文暴露。

2.2 客户端配置

支持 MCP 的客户端(AI 助手、IDE 插件、Agent 框架等)通常通过一份 JSON 配置接入。以下为通用写法:

mcp 客户端配置
{
  "mcpServers": {
    "jingdata": {
      "type": "http",
      "url": "https://mcp.jingdata.com/sse",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}
字段名因客户端而异

不同客户端对传输类型的键名可能是 type / transport,请求头可能是 headers / httpHeaders,URL 键可能是 url / serverUrl。请以所用客户端的文档为准。

配置后连不上?按这个顺序排查

  1. 传输类型选错了:本服务使用 Streamable HTTP,不是经典 SSE。若客户端要求指定类型, 请选 http / streamable-http,不要选 sse。
  2. URL 用了 http:必须使用 https。用 http 会先收到跳转,而部分客户端不跟随跳转,表现为连接失败。
  3. 路径不完整:完整地址是 https://mcp.jingdata.com/sse,路径 /sse 不能省略。
  4. 认证头格式不对:必须是 Authorization: Bearer <TOKEN>,Bearer 与令牌之间有一个空格,前缀不能省略。
  5. 自定义请求头没生效:部分客户端需要把认证头写在专门的 headers 字段里,而不是环境变量。

2.3 连接与调用流程

  1. initialize —— 客户端发送初始化请求,与服务端建立会话。
  2. notifications/initialized —— 初始化完成通知(可选,部分客户端需要)。
  3. tools/list —— 获取可用工具清单(可选,用于动态发现)。
  4. tools/call —— 调用具体工具执行查询。

初始化响应的 HTTP 头会返回 Mcp-Session-Id,后续请求建议携带该会话标识以复用会话。加密传输请始终使用 https。

一次完整的工具调用请求

json-rpc 请求
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "search",
    "arguments": {
      "arg0": "jingdata_project",
      "arg1": "{\"query\":{\"match_all\":{}},\"size\":10,\"track_total_hits\":true}"
    }
  }
}
search 的查询语句是「字符串」而非对象

arg1 需要传入 JSON 文本(序列化后的字符串),而不是 JSON 对象。这是调用时最常见的报错原因。

2.4 原生调用示例

下面这段 Python 代码不依赖任何 SDK,直接通过 HTTP 完成接入与查询,可直接作为对接起点:

python · 无 sdk 接入
import http.client, json, time

HOST        = "mcp.jingdata.com"
TOKEN       = "Bearer <YOUR_TOKEN>"        # 向鲸准申请获取
MCP_VERSION = "2024-11-05"                 # MCP 协议版本参数,需与客户端声明一致
session = None

def post(msg):
    global session
    c = http.client.HTTPSConnection(HOST, timeout=60)
    h = {
        "Authorization": TOKEN,
        "Content-Type": "application/json",
        "Accept": "application/json, text/event-stream",
    }
    if session:
        h["Mcp-Session-Id"] = session
    c.request("POST", "/sse", body=json.dumps(msg), headers=h)
    r = c.getresponse()
    sid = r.getheader("Mcp-Session-Id")
    if sid:
        session = sid                                     # 会话复用
    raw = r.read().decode("utf-8", "replace")
    c.close()
    for line in raw.splitlines():                         # 兼容 SSE 分片格式
        if line.startswith("data:"):
            return json.loads(line[5:].strip())
    return json.loads(raw)

def initialize():
    post({"jsonrpc": "2.0", "id": 1, "method": "initialize",
          "params": {"protocolVersion": MCP_VERSION, "capabilities": {},
                     "clientInfo": {"name": "my-app", "version": "1.0"}}})
    post({"jsonrpc": "2.0", "method": "notifications/initialized", "params": {}})

def call_tool(name, arguments):
    return post({"jsonrpc": "2.0", "id": 2, "method": "tools/call",
                 "params": {"name": name, "arguments": arguments}})

# ---- 用法:查最近一个完整交易日的全部投融资交易事件 ----
from datetime import date, timedelta

initialize()
day = date.today() - timedelta(days=1)        # 最近一天,可按需替换
dsl = json.dumps({
    "query": {"bool": {"filter": [
        {"range": {"finance_date": {
            "gte": day.isoformat(),
            "lt": (day + timedelta(days=1)).isoformat()}}}]}},
    "sort": [{"finance_date": {"order": "desc"}}, {"_id": {"order": "asc"}}],
    "size": 10, "from": 0, "track_total_hits": True,
}, ensure_ascii=False)

resp = call_tool("search", {"arg0": "jingdata_large_transaction", "arg1": dsl})
# 大响应会被切成多个 content 分片,必须直接拼接(不要用 "\n".join)
text = "".join(c.get("text", "") for c in resp["result"]["content"])
data = json.loads(text)
print(data["hits"]["total"], "条交易事件")

2.5 完整取数函数(复制即可用)

上一节只演示了发一次请求。实际取数还需要处理分页、去重、错误判定与重试 —— 下面这个函数已经把这些都封装好, 可直接接在上一段代码之后使用:

python · 分页取数完整实现
import time

def fetch_all(index, query, page_size=10, max_pages=None):
    """分页拉取一个索引的全部命中记录。

    已按本服务的约定处理:单页上限 10、稳定排序、按 _id 去重、
    错误正文判定、响应分片拼接、失败退避重试。
    依赖上一个示例中的 call_tool()。
    """
    rows, seen, page = [], set(), 0

    while max_pages is None or page < max_pages:
        sort = list(query.get("sort") or [])
        if not any(k in ("id", "_id") for s in sort for k in s):
            sort.append({"id": {"order": "asc"}})        # 稳定分页的次级排序

        dsl = dict(query)
        dsl["sort"] = sort
        dsl["size"] = page_size
        dsl["from"] = page * page_size
        dsl["track_total_hits"] = True

        data = None
        for attempt in range(4):                          # 最多重试 3 次
            try:
                r = call_tool("search", {
                    "arg0": index,
                    "arg1": json.dumps(dsl, ensure_ascii=False),
                })
                result = r.get("result", {})
                # 大响应会被切成多个 content 分片,必须直接拼接
                body = "".join(c.get("text", "") for c in result.get("content", []))
                if result.get("isError") or not body.strip():
                    raise RuntimeError("isError 或响应正文为空")
                data = json.loads(body)
                if "error" in data:
                    raise RuntimeError(data["error"])     # 如 size 超限、聚合被拒
                break
            except Exception:
                if attempt == 3:
                    raise
                time.sleep(2 ** attempt)                  # 退避重试

        hits = data["hits"]["hits"]
        if not hits:
            break
        for h in hits:                                    # 按 _id 去重
            if h["_id"] not in seen:
                seen.add(h["_id"])
                rows.append(h["_source"])
        if len(hits) < page_size:                         # 已到最后一页
            break
        page += 1

    return rows


# ---- 用法:拉取近 30 天的交易事件(最多 5 页) ----
from datetime import date, timedelta

since = (date.today() - timedelta(days=30)).isoformat()

rows = fetch_all("jingdata_large_transaction", {
    "query": {"bool": {"filter": [
        {"range": {"finance_date": {"gte": since}}}]}},
}, max_pages=5)

print(len(rows), "条")
这个函数替你处理了四件事

① 单页 10 条的 size 限制与 from 翻页;② 追加 id 作为次级排序,避免翻页时重复或漏数据; ③ 按 _id 本地去重;④ 判定 isError 与空响应正文,失败时退避重试。

03工具说明

服务共提供 6 个工具。通用查询建议的顺序是:先 getIndexes 了解有哪些索引 → getMapping 确认字段名与类型 → 再 search 查询。涉及枚举值(如融资轮次、国家编码)时,用 getDictsByName 取标准编码。产业链相关的查询请使用两个专用工具(searchCompaniesByChainNode / getCompanyChainLayer),不要自行拼装 DSL。

工具参数说明
getIndexes 无 返回服务提供的全部数据索引清单(索引名 + 中文描述)。用于确认当前可用的数据范围。
getMapping arg0:索引名 返回该索引的字段结构:字段名、数据类型、中文含义,以及字段关联的枚举字典名。查询前请先确认字段,避免字段名拼写错误。
search arg0:索引名
arg1:查询语句
执行查询。arg1 为标准 Elasticsearch DSL 的 JSON 字符串。返回标准 ES 响应结构(hits.hits 数据、hits.total 总量)。
getDictsByName arg0:字典名 返回枚举字典的 {编码: 名称} 映射,例如融资轮次字典 focus_phase。查询结果中的轮次等字段为编码,需用字典还原为中文。
searchCompaniesByChainNode
产业链专用
arg0:节点 ID
arg1:行政区划编码
arg2:偏移量
arg3:每页数量
按产业链节点查企业。传入节点 ID(chain_id)即可返回该节点下的关联企业,arg1 可按地区收窄。封装了节点关联与地区匹配逻辑,无需自行拼装 DSL。详见 5.3。
getCompanyChainLayer
产业链专用
arg0:公司 ID
arg1:公司名称
arg2:偏移量
arg3:每页数量
查企业所属的产业链。返回该企业所属产业链的完整层级路径与关联节点 ID 数组,用于回答「这家公司在哪些产业链上」。arg0 与 arg1 二选一,优先使用公司 ID。详见 5.3。
参数名固定为 arg0 / arg1

工具参数使用位置命名,不是 index / query。getIndexes 传空对象 {} 即可。

调用示例

① 列出全部索引

arguments
{}

② 查看某索引的字段结构

arguments
{
  "arg0": "jingdata_large_transaction"
}

③ 读取融资轮次字典

arguments
{
  "arg0": "focus_phase"
}

04数据索引

当前开放 17 个可查询索引,其中 5 个为产业链专题索引。每个索引均提供完整的字段结构,展开「字段结构」即可查看字段名与含义。

关于数据规模

数据规模以量级标注。鲸准数据持续更新与增长,精确总量请在查询时用 track_total_hits: true 读取 hits.total 获取实时值。

索引内容数据量级
jingdata_large_transaction投融资 / 并购交易事件十万级
jingdata_project创业项目档案百万级
jingdata_company企业工商信息(含产业链归属)亿级
jingdata_org投资机构档案十万级
jingdata_fund基金基本信息十万级
jingdata_fund_manager基金管理人万级
jingdata_investment基金对外投资记录十万级
jingdata_lp_infoLP(出资人)基本信息万级
jingdata_lp_invest_infoLP 对外投资记录十万级
jingdata_industry_v2行业标签维表(含项目数 / 热度)万级
jingdata_industry_track一级市场热门赛道百级
jingdata_secondary_market_hot二级市场热门板块百级
jingdata_industry_chain_particulars产业链节点基本信息(结构 / 层级 / 完整路径)千级
jingdata_industry_chain产业链节点 × 地区经营统计百万级
jingdata_industry_chain_analysis产业链节点 × 地区财务分析百万级
jingdata_industry_chain_evolution_analysis产业链节点估值序列百万级
jingdata_industry_chain_market_applies产业链节点市场累计涨跌幅千万级
查看全部字段结构(17 个索引)→

05产业链数据

鲸准产业链体系把每个产业自上而下拆解为多层级节点:产业链 → 环节 → 细分领域 → 末级节点。围绕这套结构,平台提供 5 个产业链专题索引,覆盖节点结构、企业经营统计、财务分析、估值序列与市场涨跌幅。

5.1 五个产业链索引

索引用途
jingdata_industry_chain_particulars 节点字典。查产业链结构——节点名称、层级、父节点、完整路径。查企业前先在这里取节点 ID。
jingdata_industry_chain 节点 × 地区经营统计。企业数量、融资企业数、融资笔数、上市公司数、总市值、营收、利润、市盈率、市净率。
jingdata_industry_chain_analysis 节点 × 地区财务分析。按会计年份的 A 股 / 港股 市值、总营收、总利润。
jingdata_industry_chain_evolution_analysis 节点估值序列。逐日的静态 / 滚动市盈率、市净率、市销率、市现率、总市值,可与沪深300对比。
jingdata_industry_chain_market_applies 节点市场涨跌幅。按地区、按时间窗口的行业累计涨跌幅与沪深300涨跌幅。

5.2 节点与节点 ID

每个节点有一个全局唯一的数字 ID(chain_id),跨产业链不重复——它是一切产业链查询的关联键。

  • chain_id —— 节点 ID,后续查企业、查统计都用它
  • name —— 节点名称
  • level —— 节点层级(顶层产业链为第 1 层,逐级向下)
  • parent —— 父节点(id + name)
  • chain_id_path —— 从根节点到自身的完整层级路径

按名称查找节点时,务必使用 term + name.keyword 精确匹配;使用 match 会命中大量名称相近的衍生节点。

index: jingdata_industry_chain_particulars · 取到 chain_id
{
  "query": {
    "term": {
      "name.keyword": "开放数据平台"
    }
  },
  "size": 10,
  "track_total_hits": true
}

5.3 如何查询产业链节点下的企业

用专用工具,不要自己拼查询

服务为产业链场景提供了两个 MCP 专用工具,产业链的查询一律走它们:

· searchCompaniesByChainNode —— 查某个节点下有哪些企业,可按地区收窄
· getCompanyChainLayer —— 查某家企业归属于哪些产业链节点

节点关联与地区匹配的逻辑已封装在工具内部,不需要、也不建议自行拼装 DSL。

第一步:取得节点 ID

节点 ID(chain_id)是产业链查询唯一需要的关联键,先从节点字典中取得(方式见 5.2):

index: jingdata_industry_chain_particulars · 取到 chain_id
{
  "query": {
    "term": {
      "name.keyword": "开放数据平台"
    }
  },
  "size": 10,
  "track_total_hits": true
}

第二步:查该节点下的企业

把节点 ID 作为 arg0 传给 searchCompaniesByChainNode,即返回该节点下的全部企业。返回结构与 search 一致(hits.hits 为数据、hits.total 为总量)。

tool: searchCompaniesByChainNode · 该节点下的全部企业
{
  "arg0": "80",
  "arg3": 10
}
参数是否必填说明
arg0 必填 产业链节点 ID,取自 jingdata_industry_chain_particulars 的 chain_id。请勿臆造节点 ID。
arg1 可选 行政区划编码,不传表示全国。详见下方「按地区收窄」。
arg2 可选 结果偏移量,从 0 开始,默认 0。分页时按每页数量递增。
arg3 可选 每页返回数量,默认 10,上限 10。要求 arg2 + arg3 ≤ 10000,超出会被拒绝并提示。

按地区收窄

arg1 接受 省、市、县任意层级的 6 位行政区划编码(GB/T 2260),服务端会自动判断层级并匹配,无需指定粒度:

层级行政区划编码调用参数
省级广东省 440000 {"arg0": "80", "arg1": "440000", "arg3": 10}
市级深圳市 440300 {"arg0": "80", "arg1": "440300", "arg3": 10}
县级深圳市南山区 440305 {"arg0": "80", "arg1": "440305", "arg3": 10}

三种写法的粒度不同,服务端会自动匹配对应层级,无需额外声明。省 / 市 / 县编码均采用 GB/T 2260 的 6 位数字。

两个约定

① 必须传 6 位数字编码,不要传「深圳」这类中文地名。
② 结果仅覆盖中国境内企业(address1 = 150)。

反向查询:某家企业属于哪些产业链

使用 getCompanyChainLayer。arg0(公司 ID)与 arg1(公司名称)二选一必填其一,优先传公司 ID,命中更准:

tool: getCompanyChainLayer · 查该企业的产业链归属
{
  "arg0": "legal-4qjgm3c6t2",
  "arg3": 10
}
参数是否必填说明
arg0 二选一 公司 ID(精确匹配)。优先使用。
arg1 二选一 公司名称关键词(短语匹配,同时检索简称与全称)。仅在拿不到公司 ID 时使用。
arg2 可选 结果偏移量,从 0 开始,默认 0。
arg3 可选 每页返回数量,默认 10,上限 10。

arg0 与 arg1 都不传会被拒绝,返回「companyId 与 companyName 至少提供一个」;两个都传时以 arg0 为准。

返回结果中,industry_chain_layer 是该企业所属产业链的完整路径(逐层嵌套,最内层为末级节点);related_node_ids 是关联节点 ID 数组,可直接用于反查同一节点下的其他企业:

industry_chain_layer · 路径逐层嵌套
[
  {
    "name": "人工智能产业链",
    "id": "chain-19b20d6a969kbxd",
    "child": {
      "name": "基础层",
      "id": "63",
      "child": {
        "name": "数据资源",
        "id": "67",
        "child": {
          "name": "开放数据平台",
          "id": "80"
        }
      }
    }
  }
]
按名称查询要谨慎

arg1 为短语匹配,会同时检索企业简称与全称,可能命中多家名称相近的公司。返回多条时应结合 full_name 判断是否为目标企业;能拿到公司 ID 就一定用公司 ID。

排序与分页

该工具的结果已由服务端固定排序(先按 sort_type 升序、再按 sort_date 降序),顺序稳定,翻页时直接递增 arg2 即可,无需自行构造排序条件。

不要用 search 手写节点查询

企业的产业链归属记录在 jingdata_company 索引的 related_node_ids(节点 ID 数组)与 industry_chain_layer(层级路径)两个字段中。早期做法是在 search 里用 term 匹配 related_node_ids 并自行叠加地区条件,现已由 searchCompaniesByChainNode 统一封装,请不要再手写这段逻辑。
另外该索引的数据为工商与融资混装,字段随记录变化,不少企业没有简介、融资、人数等信息,读取时需按字段可能缺失处理。

5.4 节点 × 地区的经营统计

需要「某节点在全国 / 某省 / 某市的企业数量、融资与上市情况」时,查 jingdata_industry_chain,用 chain_id 配合 level(地区粒度:1 国家 / 2 省 / 3 市 / 4 区县)定位:

index: jingdata_industry_chain · level 1 = 全国口径
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "chain_id": "80"
          }
        },
        {
          "term": {
            "level": "1"
          }
        }
      ]
    }
  },
  "size": 10,
  "track_total_hits": true
}

5.5 时间序列与市场表现

以下两个索引同样以 chain_id 关联节点,用于观察趋势:

  • jingdata_industry_chain_evolution_analysis —— 节点逐日估值指标(静态 / 滚动市盈率、市净率、市销率、市现率、总市值)。用 code 区分「沪深300」与「行业个股」两条序列,不要混读。
  • jingdata_industry_chain_market_applies —— 节点累计涨跌幅。用 type 区分时间窗口(1 近一月 / 2 近三月 / 3 近一年 / 4 近三年),查询时必须锁定单一 type,否则不同窗口的数据混在一条序列里会呈现无意义的跳变。

同理,财务分析索引 jingdata_industry_chain_analysis 的 record_type(1 市值 / 2 总营收 / 3 总利润)也需按指标类型分别查询,不宜混列。

06字段字典

部分字段在数据中存储为编码,需要结合字典还原为中文名称。本页汇总:服务端可查的字典、索引内嵌的枚举、常用地区编码,以及遇到无法还原的编码时该怎么办。

6.1 focus_phase —— 融资轮次

适用于交易事件索引的 finance_phase、创业项目索引的 investment_phase 等字段。查询时传编码(字符串),展示时用字典还原。

编码轮次
5种子轮
10天使轮
20Pre-A轮
30A轮
35A+轮
37Pre-B轮
40B轮
45B+轮
50C轮
55C+轮
60D轮
70E轮及以后
90PreIPO
100并购
110上市

其他取值

编码轮次
-50战略投资
-30定增
-40上市后
-100未知轮次
0未融资
77新四板
80新三板

6.2 country —— 国家编码

用于 address1 字段。当前字典仅包含:150 → 中国。

以上两个字典可通过工具 getDictsByName 实时查询,无需在本地维护。

6.3 索引内嵌枚举

以下枚举直接来自索引自身的字段定义,可直接对照使用:

机构类型(jingdata_org.record_type)

编码机构类型
1VC/PE
2企业风险投资
3市场化母基金
4政府引导基金
5其他类型

其他编码

6.4 常用地区编码

address1~address4 依次为国家 / 省 / 市 / 区县编码,采用 GB/T 2260 行政区划代码。 其中 address3 是市级编码,做城市筛选时最常用。以下为常用市级编码:

编码城市编码城市
110000北京市420100武汉市
120000天津市510100成都市
310000上海市500000重庆市
440100广州市610100西安市
440300深圳市320100南京市
330100杭州市320500苏州市

完整行政区划编码请参照 GB/T 2260 国家标准;服务不提供地区字典查询工具。

6.5 遇到无法还原的编码怎么办

字段结构中标注为「编码」的字段还有一些(如基金类型、管理类型、主体类型等),服务端的字典工具暂未覆盖。 处理建议:

  1. 先在本页与 同名不同义速查 中查找是否已给出取值;
  2. 行政区划类编码按 GB/T 2260 标准还原;
  3. 其余业务编码可先按原值透传展示,不影响查询与筛选(筛选时同样传编码值);
  4. 确需中文对照表用于交付物时,请联系鲸准对接人索取。

07一级行业编码

项目、公司等索引的 industry_v2 字段为一级行业,共 21 个编码。使用 term 精确匹配 industry_v2.id 可获得该行业的全部记录(注意 id 需作为字符串传入)。

编码行业名称项目量级操作
1材料万级
2建筑建材万级
3电子商务万级
4化工万级
5教育万级
6节能环保万级
7金融万级
8能源矿产万级
9农业万级
10企业服务十万级
11汽车交通万级
12社交社区万级
13生产制造十万级
14文体行业万级
15物流仓储万级
16消费生活十万级
17新一代信息技术万级
18医疗健康万级
19政府及公用事业千级
20房地产万级
21电子信息产业万级

「项目量级」为 jingdata_project 索引下按该一级行业统计的记录量级。数据持续增长,此处仅标示量级;精确数量请以查询返回的 hits.total 为准。

细分行业不在 industry_v2 中

industry_v2 只覆盖上述 21 个一级行业。像「人工智能」「大模型」这类细分领域 / 概念属于业务标签,存放在 tags_v2 字段中,筛选方式见标签精确筛选。

08查询语法与示例

search 接受标准 Elasticsearch DSL。以下示例可直接替换索引名与条件使用。

8.1 基础检索

查询企业工商索引中包含「人工智能」的公司,返回前 10 条并统计总量:

dsl · 按名称关键词检索
{
  "query": {
    "match": {
      "name": "人工智能"
    }
  },
  "size": 10,
  "track_total_hits": true
}

8.2 统计总量

只取总数、不取明细,是最轻量的查询方式。track_total_hits 设为 true 时,hits.total 返回精确总数;不设置则可能只返回近似值或上限值。

dsl
{
  "query": {
    "match_all": {}
  },
  "size": 1,
  "track_total_hits": true
}

8.3 时间范围查询

查询指定日期的全部投融资交易事件,按时间倒序并分页拉取:

dsl · 按交易日查询
{
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "finance_date": {
              "gte": "2026-09-28",
              "lt": "2026-09-29"
            }
          }
        }
      ]
    }
  },
  "sort": [
    {
      "finance_date": {
        "order": "desc"
      }
    },
    {
      "_id": {
        "order": "asc"
      }
    }
  ],
  "size": 10,
  "from": 0,
  "track_total_hits": true
}
分页必须带稳定的排序字段

如果只按 finance_date 排序,而当日大量记录的该字段值相同,则 from 翻页会出现重复或漏数据。请务必追加一个唯一字段作为次级排序(如 _id),并在客户端按 _id 去重。

8.4 标签精确筛选

细分领域通过 tags_v2 筛选。该字段是 nested 类型,必须使用 nested 查询并指定 path。

第一步,在行业标签维表中查到目标标签的 id:

在 jingdata_industry_v2 中精确查标签
{
  "query": {
    "term": {
      "name.keyword": "人工智能"
    }
  },
  "size": 3,
  "track_total_hits": true
}

返回结果中的 _source.id 即为标签 id(例如「人工智能」为 tag-dccb0a7af2),project_num 是该标签下的项目数量,parent_tag 为其上级行业。

标签名匹配请使用 term + name.keyword

name 字段采用中文分词。以「人工智能」为例:使用 term + name.keyword 可精确命中唯一匹配;若改用 match + name,会连带命中「人工智能芯片」「人工智能技术」「人工智能算法」等大量衍生标签,需要自行在结果中挑选目标标签。

第二步,用该 id 在项目索引中精确筛选:

dsl · 按标签精确筛选
{
  "query": {
    "nested": {
      "path": "tags_v2",
      "query": {
        "term": {
          "tags_v2.id": "tag-dccb0a7af2"
        }
      }
    }
  },
  "size": 10,
  "track_total_hits": true
}
宽口径 vs 精确口径

用 tags_v2.id + term 是精确命中;若改用 tags_v2.name + match,会把「人工智能芯片」「人工智能技术」等一并命中,数量会明显放大。需要精确统计请使用 id。

8.5 按地区筛选

筛选深圳市(440300)的创业项目:

dsl · 按城市筛选
{
  "query": {
    "term": {
      "address3": "440300"
    }
  },
  "size": 10,
  "track_total_hits": true
}

8.6 组合条件

用 bool 组合多个条件:filter 用于筛选(不参与相关性打分,性能更好),must 用于需要匹配的条件。

dsl
{
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "finance_date": {
              "gte": "2026-01-01"
            }
          }
        },
        {
          "term": {
            "finance_phase": "30"
          }
        }
      ],
      "must": [
        {
          "nested": {
            "path": "investor",
            "query": {
              "match": {
                "investor.name": "红杉"
              }
            }
          }
        }
      ]
    }
  },
  "sort": [
    {
      "finance_date": {
        "order": "desc"
      }
    },
    {
      "_id": {
        "order": "asc"
      }
    }
  ],
  "size": 10,
  "track_total_hits": true
}
本服务不支持聚合(aggs)

任何包含 aggs / aggregations 的查询都会被拒绝,返回:聚合功能已被禁用。本服务仅允许数据查询,不接受任何聚合操作(aggs/aggregations),请移除聚合参数后重试。 统计需求请在调用方对查询结果自行处理。

以下写法不可用(示例)

dsl · 会被服务拒绝
{
  "query": {
    "match_all": {}
  },
  "size": 0,
  "aggs": {
    "by_industry": {
      "terms": {
        "field": "industry_v2.name",
        "size": 10
      }
    }
  }
}

09已知陷阱速查

下面 8 条是接入过程中最容易踩的坑。先扫一遍这张表,可以避开绝大部分返工。

#陷阱现象 / 正确做法
P1一次取超过 10 条 直接报错。size 上限为 10,用 from 分页。
P2在查询里带聚合 请求被拒绝。移除 aggs / aggregations,改在调用方统计。
P3排序字段存在大量重复值时翻页 会出现重复或漏数据。必须追加唯一字段作为次级排序。
P4企业索引用 _id 排序 直接返回空结果。必须改用 sort: [{"id": {"order": "asc"}}]。
P5自行拼装产业链节点查询 底层字段容易用错:对 industry_chain_layer 做 nested 查询会返回 0 条(它只承担展示职责,筛选须用 related_node_ids)。 请直接使用专用工具 searchCompaniesByChainNode,无需手写这段逻辑。
P6默认产业链路径数组的第一条就是目标链 一家企业可能同时属于多条产业链。getCompanyChainLayer 返回的 industry_chain_layer 是数组, 第一个元素不一定是你要找的那条链,校验时应遍历整个数组去匹配目标节点。
P7该用 nested 的字段没用 tags_v2 必须用 nested + path;industry_v2 不是 nested,用了会报 400。
P8用 match 做精确匹配 命中大量无关结果。name 这类字段要精确匹配请用 name.keyword + term。

P1 · 单页最多 10 条

  • 现象:size 超过 10 时请求被拒绝,返回 size=11 超过该服务单页最大限制10…
  • 正确做法:size 固定为 10(或不传),用 from 翻页。批量取数请用 完整取数函数。

P2 · 不支持聚合

  • 现象:请求含 aggs / aggregations 时被拒绝,返回「聚合功能已被禁用…」。
  • 正确做法:分组统计在调用方完成;或优先查看索引里已预计算好的统计字段 (如 project_num、com_count、hot_value)。

P3 · 分页需要稳定排序

  • 现象:只按一个重复值很多的字段(如 finance_date)排序时,翻页会出现重复记录或漏掉记录。
  • 正确做法:在排序数组末尾追加唯一字段,例如 "sort": [{"finance_date": {"order": "desc"}}, {"_id": {"order": "asc"}}], 并在本地按 _id 去重。

P4 · 企业索引的排序字段

  • 现象:在 jingdata_company 上用 sort: [{"_id": …}] 会直接返回空结果。
  • 正确做法:改用 sort: [{"id": {"order": "asc"}}]。

P5 · 产业链查询不要手写 DSL

  • 现象:自行拼装时容易用错字段 —— 对 industry_chain_layer 使用 nested 查询会返回 0 条; 按地区收窄时还要自行处理 address1~address4 的层级对应关系。
  • 正确做法:直接调用专用工具 searchCompaniesByChainNode(按节点查企业,地区支持省 / 市 / 县)与 getCompanyChainLayer(查企业归属),两者已封装上述逻辑。详见 产业链专节。

P6 · industry_chain_layer 是数组

  • 现象:一家企业可能同时属于多条产业链,数组的第一个元素不一定是你查询的那条链。
  • 正确做法:校验时遍历整个数组匹配目标节点,不要只判断第一条。

P7 · nested 用对地方

  • tags_v2、investor、standard1 等是 nested 类型,查询必须带 path。
  • industry_v2 不是 nested,对它使用 nested 查询会返回 400 Bad Request。
  • 各字段该用什么筛选方式,可直接看索引字段表的「筛选方式」列。

P8 · 精确匹配要用 .keyword

  • 现象:用 match 查「人工智能」会连带命中「人工智能芯片」「人工智能技术」「人工智能算法」等大量衍生条目。
  • 正确做法:需要唯一匹配时用 {"term": {"name.keyword": "人工智能"}}。

10同名不同义速查

同一字段名在不同索引里含义可能完全不同。这类错误不会报错,但结果会错 —— 比报错更危险,务必对照本表。

字段所在索引含义取值范围
level jingdata_industry_chain_particulars 链内层级 1 产业链 / 2 主层 / 3 子层 / 4 末级
jingdata_industry_chain、…_analysis、…_market_applies 地理粒度 1 国家 / 2 省 / 3 市 / 4 区县
type jingdata_industry_chain_market_applies 时间窗口 1 近一月 / 2 近三月 / 3 近一年 / 4 近三年
jingdata_investment、jingdata_large_transaction 的 investor.type 主体类型编码 编码值,暂未开放字典
record_type jingdata_industry_chain_analysis 指标类型 1 市值 / 2 总营收 / 3 总利润
jingdata_org 机构类型 1 VC/PE / 2 企业风险投资 / 3 市场化母基金 / 4 政府引导基金 / 5 其他类型
code jingdata_industry_chain_evolution_analysis 序列类型 1 沪深300 / 2 行业个股(两条序列不要混读)
status 多个索引 记录状态 通常 1=有效 / 0=无效,各索引语义略有差异
address1~address4 多个索引 行政区划 依次为国家 / 省 / 市 / 区县编码(GB/T 2260)

三套并行的分类体系,不可混用

平台里存在三套彼此独立的分类,最容易被当成一回事:

体系入口字段用途与取值形态
一级行业industry_v2.id 粗粒度行业筛选。共 21 个数字码,见 一级行业编码。
业务标签tags_v2.id 细分领域 / 概念筛选。取值形如 tag-dccb0a7af2,需先用行业标签维表查出 id。
产业链节点searchCompaniesByChainNode 产业链归属筛选,底层字段为 related_node_ids。节点 ID 全局唯一,取值形如 80 或 chain-19b20d6a969kbxd; 查询请走专用工具,不要手写 DSL。
最典型的一种混淆

「人工智能」只是业务标签,不是一级行业 —— 用 industry_v2 查它会得到 0 条。 而产业链节点里的「人工智能产业链」又是第三套体系,与标签 id 并不通用。

11使用限制

限制项说明
单页最多 10 条 size 上限为 10。超过会直接报错:size=11 超过该服务单页最大限制10,请将size设置为不超过10后分页查询该服务。批量获取数据请使用 from 分页。
不支持聚合 不接受 aggs / aggregations。分组统计、求和、去重计数等请在调用方完成。
禁止的查询结构 下列键名一旦出现在查询中会被直接拒绝,返回 禁止的查询结构: <键名> (位置 $.<路径>)。 它们会绕过过滤、泄露内部结构或消耗大量资源: ① global(忽略 query 条件直接扫描全索引); ② script / script_fields / runtime_mappings / script_query(可执行脚本逻辑); ③ percolate / terms_enum(枚举字段全部取值); ④ scroll / search_after / pit(深翻页三件套,一律不可用); ⑤ profile / explain(暴露索引内部结构)。
带来的约束:需要翻深页时不能借助深翻页机制,只能使用 from + size 常规分页。
已删除数据自动过滤 服务端会自动注入 is_deleted = false 条件,返回结果不包含已删除记录,调用方无需自行处理该字段。
分页需稳定排序 排序字段存在大量重复值时,需追加唯一字段(如 _id)作为次级排序,否则翻页会出现重复或遗漏。
响应可能被分片 结果较大时,MCP 响应会被拆分为多个 content 片段。拼接文本时必须直接相连(如 "".join(...)),使用换行符拼接会破坏 JSON 结构导致解析失败。
字段以实际查询为准 各索引的字段结构可能随数据版本调整。文中列出的字段可供参考,未列出的字段也可能可用,请以实际查询结果为准。
排序字段因索引而异 多数索引可用 _id 作为排序 tiebreaker;企业索引 jingdata_company 必须使用 id,用 _id 排序会返回空结果。
使用 https 服务仅支持加密传输,使用 http 会收到永久跳转,部分客户端不跟随跳转会导致连接失败。

批量拉取数据建议

  • 先用 track_total_hits: true 拿到总量,据此计算需要翻多少页。
  • 按 from = 0, 10, 20, ... 依次翻页,每次 size = 10。
  • 排序始终带上 _id 作为次级排序,并在本地按 _id 去重。
  • 控制请求频率,避免对服务造成压力。

12错误码与常见报错

返回值含义处理方式
HTTP 401
{"code": -32001}
认证失败 检查 Authorization: Bearer <TOKEN> 请求头是否正确携带、令牌是否有效。
{"code": 300005, "msg": "无权限访问此api"} 该索引未向你的账号开放 索引名正确但未获得访问权限。请以 getIndexes 返回的可用清单为准,或联系鲸准确认账号权限范围。
{"code": 300010, "msg": "URL不存在"} 索引不存在或不可查询 通过 getIndexes 确认索引名拼写是否正确;本服务当前开放 17 个可查询索引(含产业链专题索引)。
size=... 超过该服务单页最大限制10 分页超限 将 size 调整为不大于 10,改用 from 分页。
聚合功能已被禁用... 使用了聚合 移除 aggs / aggregations 参数,改为在调用方统计。
禁止的查询结构: xxx (位置 $.xxx) 查询中使用了被禁用的键名 移除该键后重试。global / script / script_fields / runtime_mappings / scroll / search_after / pit / profile / explain 等均在禁用之列,完整清单见 使用限制。
400 Bad Request 请求格式错误 常见原因:对 /sse 使用了 GET;或对非 nested 字段使用了 nested 查询(如 industry_v2 不是 nested 类型)。
Unexpected value: xxx 字典名不存在 getDictsByName 仅支持字段结构中标注的字典名,当前为 focus_phase 与 country。

13数据时效与文档版本

13.1 数据更新

鲸准数据持续更新,各索引的数据量会随时间增长。取数时建议:

  • 用 track_total_hits: true 读取 hits.total,获取实时总量;
  • 多数索引的记录带 last_modified_at 字段,可据此判断记录的最后更新时间;
  • 交易类数据可用 finance_date、估值序列可用 trade_date 判断数据的最新日期。
关于数据截止时间

本文不承诺具体的数据截止日期。如需在交付物中标注截止时间,请以实际查询结果中最新记录的 last_modified_at(或交易索引的 finance_date)为准;涉及对外的交付口径,建议与鲸准确认后再引用。

建议记录查询快照

数据量随时间增长,同一条件在不同时间查询可能得到不同结果。用于报表或分析时,建议在业务侧记录 查询条件、取值时间与结果总量,便于复现与对账。

13.2 文档版本

项目内容
文档版本v1.3
最后更新2026-09-29
对应服务鲸准 MCP Server
索引数量17 个(含 5 个产业链专题索引)

13.3 修订记录

版本日期变更内容
v1.32026-09-29 新增 searchCompaniesByChainNode 与 getCompanyChainLayer 两个产业链专用工具,工具总数由 4 增至 6; 产业链章节改为直接调用专用工具,移除自行拼装 DSL 的查询方式;按地区筛选升级为省 / 市 / 县任意层级。
v1.22026-09-18 新增「我要查什么 → 用哪个索引」场景选型表、已知陷阱速查、同名不同义速查、数据时效与文档版本; 补充分页取数完整函数、字段筛选方式与编码字典;统一全文索引数量口径。
v1.12026-09-18 新增 5 个产业链专题索引与「如何查询产业链节点下的企业」;索引总数由 14 增至 19; 数据规模改用长期稳定的量级表述。
v1.02026-09-17 首次发布:接入方式、4 个工具、14 个数据索引与字段结构、查询示例、使用限制与错误码。

14常见问题

查询返回 0 条,是数据没有吗?

先检查三点:一是字段名是否与 getMapping 一致;二是条件值是否需要是字符串(如 industry_v2.id);三是筛选的细分行业是否属于一级行业 —— 「人工智能」等细分领域不在 industry_v2 里,必须走 tags_v2。

为什么按行业名称 match 查不到数据?

industry_v2 只包含 21 个一级行业,传入不存在的行业名称(如「人工智能」)会返回 0。若使用 industry_v2.name 做匹配,该字段支持分词检索,但仅在一级行业名称范围内有效。

怎么统计某个行业有多少项目?

服务不支持聚合,需要自行统计:可以对 21 个一级行业编码分别发起一次查询并读取 hits.total;标签维度则可直接在行业标签维表(jingdata_industry_v2)中读取 project_num 字段。

融资轮次字段为什么是数字?

轮次以编码形式存储。调用 getDictsByName 传入 focus_phase 获取编码与名称的映射表,再在展示层还原为中文。

一次最多能拿多少条数据?

单次请求最多 10 条。需要更多数据请用 from 分页循环拉取,并注意排序稳定性与去重。

数据更新频率如何?

数据规模随鲸准数据持续更新,建议在业务侧记录查询快照,并对关键指标标注数据截止时间。