金融数据访问服务

Bloomberg MCP是一个提供AI助手直接访问彭博终端数据的模型上下文协议服务器,支持参考数据、批量数据、历史分析等多种金融工具。

  • by QmQsun
  • Python
  • 本地部署
  • 24 星标
  • 更新于
在 GitHub 查看 QmQsun/Bloomberg-MCP

使用说明

彭博MCP

一个模型上下文协议服务器,让人工智能助手直接访问彭博终端数据。


Bloomberg MCP通过 模型上下文协议。它暴露了 18工具 涵盖参考数据、批量数据、历史分析、技术分析、估计、所有权、供应链、筛选、BQL查询和日历——所有这些都可以通过自然语言访问。

增强型分叉 塔林102/彭博mcp --v1.1增加了6个新工具、模块化架构、缓存层和10个分析字段集。

You: "What are the top holders and supply chain for CEG US Equity?"

Claude: runs bloomberg_get_bulk_data with TOP_20_HOLDERS_PUBLIC_FILINGS
        runs bloomberg_get_supply_chain with suppliers + customers
        → Returns structured holder list + supplier/customer network

建筑

graph TB
    subgraph Clients
        CC[Claude Code]
        WC[Web Client]
        CA[Custom App]
    end

    subgraph "Bloomberg MCP Server"
        direction TB
        MCP["FastMCP Server<br/><i>18 tools exposed</i>"]

        subgraph Handlers["Handler Layer"]
            direction LR
            REF[Reference & Historical]
            BULK[Bulk Data & Estimates]
            TA[Technical Analysis]
            SCREEN[Screening & BQL]
            OWN[Ownership & Supply Chain]
            CAL[Calendars]
        end

        subgraph Core["Core Layer"]
            direction LR
            SESSION["BloombergSession<br/><i>Singleton + Cache</i>"]
            REQ[Request Builder]
            RESP[Response Parser]
        end
    end

    BBG["Bloomberg Terminal<br/><i>blpapi on port 8194</i>"]

    CC -- stdio --> MCP
    WC -- HTTP/SSE --> MCP
    CA -- HTTP/SSE --> MCP
    MCP --> Handlers
    Handlers --> Core
    SESSION <--> BBG
    REQ --> SESSION
    SESSION --> RESP

    style MCP fill:#1a73e8,stroke:#1557b0,color:#fff
    style BBG fill:#ff6f00,stroke:#e65100,color:#fff
    style SESSION fill:#2e7d32,stroke:#1b5e20,color:#fff

工具概述(18个工具)

graph LR
    subgraph "Market Data (4)"
        T1["bloomberg_get_reference_data<br/><i>BDP snapshots</i>"]
        T2["bloomberg_get_historical_data<br/><i>BDH time series</i>"]
        T3["bloomberg_get_intraday_bars<br/><i>OHLCV candles</i>"]
        T4["bloomberg_get_intraday_ticks<br/><i>Raw ticks</i>"]
    end

    subgraph "Bulk Data & Analysis (4)"
        T5["bloomberg_get_bulk_data<br/><i>BDS tables</i>"]
        T6["bloomberg_get_estimates_detail<br/><i>Multi-period consensus</i>"]
        T7["bloomberg_get_ownership<br/><i>Holder analysis</i>"]
        T8["bloomberg_get_supply_chain<br/><i>SPLC network</i>"]
    end

    subgraph "Technical & BQL (2)"
        T9["bloomberg_get_technical_analysis<br/><i>RSI, MACD, Bollinger...</i>"]
        T10["bloomberg_run_bql<br/><i>Query language</i>"]
    end

    subgraph "Discovery (3)"
        T11["bloomberg_search_securities<br/><i>Find by name/ticker</i>"]
        T12["bloomberg_search_fields<br/><i>Field mnemonics</i>"]
        T13["bloomberg_get_field_info<br/><i>Field metadata</i>"]
    end

    subgraph "Screening (3)"
        T14["bloomberg_run_screen<br/><i>Saved EQS screens</i>"]
        T15["bloomberg_get_universe<br/><i>Index constituents</i>"]
        T16["bloomberg_dynamic_screen<br/><i>Custom filter + rank</i>"]
    end

    subgraph "Calendars (2)"
        T17["bloomberg_get_economic_calendar<br/><i>Fed, BoJ, ECB...</i>"]
        T18["bloomberg_get_earnings_calendar<br/><i>Earnings dates</i>"]
    end

    style T5 fill:#1a73e8,stroke:#1557b0,color:#fff
    style T6 fill:#1a73e8,stroke:#1557b0,color:#fff
    style T7 fill:#1a73e8,stroke:#1557b0,color:#fff
    style T8 fill:#1a73e8,stroke:#1557b0,color:#fff
    style T9 fill:#7b1fa2,stroke:#6a1b9a,color:#fff
    style T10 fill:#7b1fa2,stroke:#6a1b9a,color:#fff

新增内容(与上游相比)

  • 模块化架构 --server.py从1798行重构为约89行。处理程序、模型、格式化程序和实用程序完全分开。
  • 9个新工具 --BDS批量数据、多期估算、技术分析(//blp/tasvc)、所有权分析、供应链(SPLC)、BQL查询(//blp/bqlsvc)等。
  • 缓存层 --基于TTL的内存缓存,具有数据类型感知过期功能(价格为30秒,静态数据为24小时)。
  • 10个新字段集 --用于估算、盈利能力、现金流、资产负债表、所有权、治理、风险、估值、收益惊喜和增长的预定义字段集合。
  • 完整的彭博API表面 --涵盖了//blp/refdata、//blp/instruments、//blp/apiflds、//blp/tasvc、//blp/bqlsvc。

数据流

sequenceDiagram
    participant Client as AI Assistant
    participant MCP as MCP Server
    participant Cache as Cache Layer
    participant Val as Pydantic Validation
    participant Expand as Field Expander
    participant Session as BloombergSession
    participant BBG as Bloomberg Terminal

    Client->>MCP: Tool call (JSON)
    MCP->>Val: Validate input model
    Val-->>MCP: Validated params

    alt FieldSet shortcuts used
        MCP->>Expand: Expand FieldSet shortcuts
        Expand-->>MCP: Resolved field list
    end

    MCP->>Cache: Check cache
    alt Cache hit
        Cache-->>MCP: Cached result
    else Cache miss
        MCP->>Session: Build & send request
        Session->>BBG: blpapi Request
        BBG-->>Session: blpapi Response
        Session-->>MCP: Parsed dataclasses
        MCP->>Cache: Store with TTL
    end

    alt Markdown format
        MCP-->>Client: Formatted table
    else JSON format
        MCP-->>Client: Structured JSON
    end

彭博服务

graph LR
    subgraph "Bloomberg Terminal (localhost:8194)"
        R["//blp/refdata<br/><i>BDP, BDH, BDS, BEQS</i>"]
        I["//blp/instruments<br/><i>Security lookup</i>"]
        F["//blp/apiflds<br/><i>Field discovery</i>"]
        T["//blp/tasvc<br/><i>Technical analysis</i>"]
        B["//blp/bqlsvc<br/><i>Query language</i>"]
    end

    R --- T1[Reference Data]
    R --- T2[Historical Data]
    R --- T3[Intraday Bars/Ticks]
    R --- T4[Bulk Data]
    R --- T5[Estimates]
    R --- T6[Screening]
    I --- T7[Security Search]
    F --- T8[Field Search]
    T --- T9[RSI / MACD / Bollinger]
    B --- T10[Dynamic Queries]

    style R fill:#ff6f00,stroke:#e65100,color:#fff
    style T fill:#7b1fa2,stroke:#6a1b9a,color:#fff
    style B fill:#1a73e8,stroke:#1557b0,color:#fff

工具参考

市场数据

工具 说明 关键参数
bloomberg_get_reference_data 任何安全的当前字段值(BDP) securities, fields, overrides
bloomberg_get_historical_data 具有可配置周期的时间序列(BDH) securities, fields, start_date, end_date, periodicity
bloomberg_get_intraday_bars OHLCV蜡烛(1/5/15/30/60分钟) security, start_datetime, end_datetime, interval
bloomberg_get_intraday_ticks 原始交易/报价数据 security, start_datetime, end_datetime, event_types

批量数据与分析——新增

工具 说明 关键参数
bloomberg_get_bulk_data 批量参考数据(BDS)——持有人、股息、供应链、指数成员 security, field, overrides, max_rows
bloomberg_get_estimates_detail 具有修订势头的多期共识估计 securities, periods, metrics
bloomberg_get_ownership 全面所有权分析(持有人+内部人+机构) security, include_holders, include_changes
bloomberg_get_supply_chain Bloomberg SPLC供应链数据(供应商、客户、竞争对手) security, include_suppliers, include_customers

技术分析与BQL——新增

工具 说明 关键参数
bloomberg_get_technical_analysis TA指标通过//blp/tasvc(RSI、MACD、布林带、SMA、EMA、DMI、随机指标) security, indicators, start_date, end_date
bloomberg_run_bql 执行彭博查询语言查询 query

发现

工具 说明 关键参数
bloomberg_search_securities 按名称或部分股票代码查找证券 query, yellow_key, max_results
bloomberg_search_fields 发现彭博字段助记符 query, field_type
bloomberg_get_field_info 详细的现场元数据和文档 field_ids

筛查

工具 说明 关键参数
bloomberg_run_screen 执行已保存的彭博EQS屏幕 screen_name, screen_type
bloomberg_get_universe 带可选字段的索引/屏幕组成部分 source, include_fields
bloomberg_dynamic_screen 自定义过滤、排名和字段选择 universe, fields, filters, rank_by, top_n

日历

工具 说明 关键参数
bloomberg_get_economic_calendar 按地区/重要性分列的即将发布的宏观数据 mode, regions, importance
bloomberg_get_earnings_calendar 按宇宙/时间划分的收益公告 mode, universe, days_ahead

所有工具支持 response_format: "markdown" (默认)或 "json".

字段集快捷方式

不要记住彭博字段助记符,而是使用扩展到多个字段的简写名称。

核心字段集

字段集 字段 描述
PRICE 5 pxlast、pxopen、pxhigh、pxlow、CHG_PCT_1D
MOMENTUM 4 CHG_pct1d、CHG_PCT_5D、CHG_pc t_1M、CHG_ PCT_YTD
MOMENTUM_EXTENDED 7 +CHG_PCT_3M、CHG_pcd_6M、CHG_pc t_1年
RVOL 3+1 体积,体积_AVG_20D,周转率+计算的rvol
TECHNICAL 4 RSI_14D,挥发度_30D,挥发度_90D,β_RAW_OVERRIDABLE
VALUATION 5 市盈率、市盈率、息税折旧摊销前利润率、股息收益率、CUR_MKT_CAP
ANALYST 3 EQY_REC_CONS、BEST_TARGET_PRICE、BEST_EPS
SECTOR 2 GICS_SECTOR_NAME、GICS_INDUSTRY_NAME
SCREENING_FULL 30+ 以上全部加起来

分析场集——新增

字段集 字段 彭博社关键助记符
ESTIMATES_CONSENSUS 10 最佳价格、最佳销售、最佳价格4WK_CHG、最佳目标价格
PROFITABILITY 7 毛利率、净资产收益率、净资产回报率、净投资收益率、运营商利润
CASH_FLOW 6 FCF_YIELD、CF_FROM_OPS、NET_INCOME、EBITDA
BALANCE_SHEET 6 D/E,利息_利息_比率,净债务
OWNERSHIP 5 内部人员百分比、内部人员百分比和内部人员比率
GOVERNANCE 4 ESG得分(总体、E、S、G)
RISK 6 贝塔系数,第10/30/90/260D卷,MKT_CAP
VALUATION_EXTENDED 9 PE、P/B、P/S、EV/EBITDA、P/FCF、DVD-YLD
EARNINGS_SURPRISE 6 每股收益/销售额实际值与估计值+意外值
GROWTH 4 销售额/每股收益/息税折旧摊销前利润增长,长期增长率

动态筛选

最强大的工具。使用预先验证的字段集、过滤器和排名构建自定义屏幕——不需要知道彭博字段助记符。

flowchart LR
    A["Universe<br/><i>index, screen,<br/>or ticker list</i>"] --> B["Field Expansion<br/><i>FieldSet shortcuts<br/>→ Bloomberg fields</i>"]
    B --> C["Bloomberg API<br/><i>ReferenceDataRequest</i>"]
    C --> D["Filter<br/><i>gt, lt, between,<br/>in, eq, ...</i>"]
    D --> E["Rank & Slice<br/><i>rank_by + top_n</i>"]
    E --> F["Response<br/><i>Markdown table<br/>or JSON</i>"]

    style A fill:#e8f5e9,stroke:#2e7d32
    style C fill:#fff3e0,stroke:#ff6f00
    style F fill:#e3f2fd,stroke:#1a73e8

过滤器操作员

操作员 描述 示例
gt / gte 大于(或等于) {"field": "rvol", "op": "gt", "value": 1.5}
lt / lte 小于(或等于) {"field": "RSI_14D", "op": "lt", "value": 30}
eq / neq 等于/不等于 {"field": "GICS_SECTOR_NAME", "op": "eq", "value": "Technology"}
between 范围(含) {"field": "PE_RATIO", "op": "between", "value": [10, 25]}
in 列表中的值 {"field": "GICS_SECTOR_NAME", "op": "in", "value": ["Tech", "Health Care"]}

示例:查找超卖大批量股票

{
  "universe": "index:SPX Index",
  "fields": ["PRICE", "RVOL", "TECHNICAL", "SECTOR"],
  "filters": [
    {"field": "RSI_14D", "op": "lt", "value": 30},
    {"field": "rvol", "op": "gt", "value": 2.0}
  ],
  "rank_by": "rvol",
  "rank_descending": true,
  "top_n": 20
}

通用BDS(批量数据)字段

字段 返回
TOP_20_HOLDERS_PUBLIC_FILINGS 职位和日期前20名股东
DVD_HIST_ALL 完整的股息历史记录
SUPPLY_CHAIN_SUPPLIERS 有收入风险的供应商名单
SUPPLY_CHAIN_CUSTOMERS 具有收入风险的客户名单
SUPPLY_CHAIN_COMPETITORS 竞争对手名单
INDX_MEMBERS 指数构成
ANALYST_RECOMMENDATIONS 分析师评级详情
EARN_ANN_DT_TIME_HIST_WITH_EPS 历史收益与实际每股收益
BOARD_OF_DIRECTORS 董事会成员

缓存层

内置缓存通过数据类型感知的TTL减少了Bloomberg API的负载:

数据类型 TTL 基本原理
静态引用(名称、扇区) 24小时 很少变化
财务报表 7天 季度更新
估计/共识 4小时 全天更新
价格/交易量 30秒 接近实时
历史(EOD) 12小时 日终数据稳定
批量数据(持有人、供应链) 24小时 每日更新

项目结构

graph TB
    subgraph "src/bloomberg_mcp/"
        SERVER["server.py<br/><i>~89 lines, thin entry point</i>"]

        subgraph models["models/"]
            INPUTS["inputs.py<br/><i>22 Pydantic models</i>"]
            ENUMS["enums.py<br/><i>ResponseFormat, modes</i>"]
        end

        subgraph handlers["handlers/"]
            direction TB
            H_REF["reference.py"]
            H_HIST["historical.py"]
            H_INTRA["intraday.py"]
            H_SEARCH["search.py"]
            H_SCREEN["screening.py"]
            H_CAL["calendars.py"]
            H_BULK["bulk.py ★"]
            H_EST["estimates.py ★"]
            H_TECH["technical.py ★"]
            H_OWN["ownership.py ★"]
            H_SC["supply_chain.py ★"]
            H_BQL["bql.py ★"]
        end

        FMTR["formatters.py"]
        UTILS["utils.py"]

        subgraph core["core/"]
            SESSION["session.py<br/><i>Singleton</i>"]
            CACHE["cache.py ★<br/><i>TTL cache</i>"]
            REQ["requests.py"]
            RESP["responses.py"]
        end

        subgraph tools["tools/"]
            direction TB
            T_REF["reference.py"]
            T_HIST["historical.py"]
            T_SEARCH["search.py"]

            subgraph ds["dynamic_screening/"]
                MODELS_DS["models.py<br/><i>19+ FieldSets</i>"]
                SCREEN_DS["screen.py"]
                FILTERS["filters.py"]
            end

            subgraph mn["morning_note/"]
                MN_CFG["config.py"]
                MN_US["us_session.py"]
                MN_STORE["storage.py"]
            end
        end
    end

    SERVER --> handlers
    SERVER --> models
    handlers --> core
    handlers --> FMTR
    handlers --> UTILS

    style SERVER fill:#1a73e8,stroke:#1557b0,color:#fff
    style SESSION fill:#2e7d32,stroke:#1b5e20,color:#fff
    style CACHE fill:#2e7d32,stroke:#1b5e20,color:#fff
    style H_BULK fill:#e65100,stroke:#bf360c,color:#fff
    style H_EST fill:#e65100,stroke:#bf360c,color:#fff
    style H_TECH fill:#e65100,stroke:#bf360c,color:#fff
    style H_OWN fill:#e65100,stroke:#bf360c,color:#fff
    style H_SC fill:#e65100,stroke:#bf360c,color:#fff
    style H_BQL fill:#e65100,stroke:#bf360c,color:#fff

★ = v1.1中的新功能

安装

先决条件

  • Python 3.10+
  • 彭博终端正在运行并已登录 --通过本地主机连接:8194

设置

# 1. Install Bloomberg Python SDK
pip install blpapi

# 2. Install bloomberg-mcp
git clone https://github.com/QmQsun/Bloomberg-MCP.git
cd Bloomberg-MCP
pip install .            # standard install
# or: pip install -e .   # editable mode (for development)

备注: blpapi 3.19.0+船舶预制车轮-- pip install blpapi 直接工作 无需额外设置即可在Windows、macOS和Linux上运行。

如果 pip install blpapi 如果失败(旧平台或Python版本),请通过C++SDK安装:

# Set Bloomberg C++ SDK path
export BLPAPI_ROOT=/path/to/blpapi_cpp_3.x.x.x   # Linux/macOS
set BLPAPI_ROOT=C:\blp\blpapi_cpp_3.x.x.x         # Windows
pip install blpapi

配置Claude代码

添加到您的Claude Code MCP设置中:

{
  "mcpServers": {
    "bloomberg-mcp": {
      "command": "python",
      "args": ["-m", "bloomberg_mcp.server"],
      "cwd": "/path/to/bloomberg-mcp",
      "env": {
        "BLOOMBERG_HOST": "localhost",
        "BLOOMBERG_PORT": "8194"
      }
    }
  }
}

配置GPT代码

添加到您的codex config.toml

[mcp_servers.bloomberg-mcp]
command = "python"
args = ["-m", "bloomberg_mcp.server"]
cwd = "/path/to/bloomberg-mcp"

[mcp_servers.bloomberg-mcp.env]
BLOOMBERG_HOST = "localhost"
BLOOMBERG_PORT = "8194"

如果无法加载到codex,请检查cwd路径

快速开始

作为Python库

from bloomberg_mcp.tools import get_reference_data, get_historical_data

# Current prices and fundamentals
data = get_reference_data(
    securities=["AAPL US Equity", "700 HK Equity", "2899 HK Equity"],
    fields=["PX_LAST", "PE_RATIO", "DIVIDEND_YIELD"]
)
for sec in data:
    print(f"{sec.security}: {sec.fields.get('PX_LAST')}")

# Multi-period estimates with overrides
data = get_reference_data(
    securities=["CEG US Equity"],
    fields=["BEST_EPS", "BEST_EPS_4WK_CHG", "BEST_TARGET_PRICE"],
    overrides={"BEST_FPERIOD_OVERRIDE": "1FY"}
)

# Historical time series
hist = get_historical_data(
    securities=["SPY US Equity"],
    fields=["PX_LAST", "VOLUME"],
    start_date="20240101",
    end_date="20241231",
    periodicity="DAILY"
)

作为MCP服务器

# stdio (default — for Claude Code)
python -m bloomberg_mcp.server

# HTTP transport (for web clients)
python -m bloomberg_mcp.server --http --port=8080

# SSE transport (for streaming clients)
python -m bloomberg_mcp.server --sse --port=8080

Docker部署

graph LR
    subgraph Docker
        MCP["bloomberg-mcp<br/><i>:8080</i>"]
    end

    subgraph Host
        BBG["Bloomberg Terminal<br/><i>:8194</i>"]
    end

    Client["AI Client"] -- "HTTP/SSE" --> MCP
    MCP -- "host.docker.internal:8194" --> BBG

    style MCP fill:#1a73e8,stroke:#1557b0,color:#fff
    style BBG fill:#ff6f00,stroke:#e65100,color:#fff
docker-compose up -d
docker-compose logs -f bloomberg-mcp

安全标识符格式

AAPL US Equity       # US stock
VOD LN Equity        # UK stock (London)
7203 JP Equity       # Japan stock (numeric)
700 HK Equity        # Hong Kong stock
1133 HK Equity       # Hong Kong stock (numeric)
601012 CH Equity     # A-share (Shanghai)
002594 CH Equity     # A-share (Shenzhen)
300750 CH Equity     # A-share (ChiNext)
SPX Index            # Index
HSI Index            # Hang Seng Index
VIX Index            # Volatility index
EUR Curncy           # Currency
CL1 Comdty           # Commodity future
SPY US Equity        # ETF

贡献

欢迎投稿!请打开问题或提交拉取请求。

pip install -e ".[dev]"
pytest                    # Unit tests (no Bloomberg needed)
pytest tests/integration/ # Integration tests (needs Terminal)
black src/ tests/
ruff check src/ tests/

贡献者

贡献者 角色
1 QmQsun 架构重构、6个新工具、缓存层、FieldSets、代码审查
2 2005年夏季 Bug发现(__main__ 双重导入修复)
3 Claude(Anthropic) 实施协助、代码生成、QA
4 塔林102 原项目基础

许可证

麻省理工学院——见 许可证 了解详情。