Skip to main content
Glama
RockFlow-AI

broker-mcp-demo

by RockFlow-AI

Broker MCP Demo

FastMCP 기반의 증권사 MCP 서버 데모(Python 버전), 두 가지를 단순화했습니다:

  • 인증은 정적 API key 사용(Authorization: Bearer <api-key>),OAuth 미사용;

  • 실제 서비스 주소 미내장:다운스트림 증권사 백엔드 주소는 사용자가 환경 변수로 직접 구성하며, 미구성 시 각 도구는 내장된 예시 데이터를 반환합니다(응답에 "mock": true 표시),즉시 체험 가능합니다.

아키텍처

┌─────────────┐  Bearer <api-key>  ┌────────────────────┐   HTTP   ┌──────────────┐
│  MCP Client │───────────────────▶│  Broker MCP Demo   │─────────▶│  券商后端服务  │
│  (Claude…)  │◀───────────────────│  (API key 校验)     │◀─────────│ (自行配置)   │
└─────────────┘                    └────────────────────┘          └──────────────┘

요청 흐름:

  1. 클라이언트가 Authorization: Bearer <api-key>를 포함해 POST /mcp를 요청합니다.

  2. 서버가 key를 BROKER_MCP_API_KEYS에 구성된 값과 하나씩 대조하여, 일치하면 통과, 아니면 401을 반환합니다.

  3. 도구 호출은 BROKER_MCP_BACKEND_BASE_URL이 가리키는 증권사 백엔드로 프록시됩니다; 미구성 시 내장된 예시 데이터를 반환합니다.

Related MCP server: Open Stocks MCP

도구

총 10개의 예시 도구로, 시세, 포지션 / 주문, 거래, 지식베이스 네 가지 범주를 다룹니다. 다운스트림 인터페이스 경로는 모두 예시이며, 실제 백엔드 연동 시 tools/ 안의 path를 수정하면 됩니다.

시세(market.py)

도구

매개변수

설명

search_ticker

keyword

회사명 / 코드로 종목 검색,market + symbol 파싱

get_latest_quote

market, symbol

종목 최신 시세 조회

get_chart

market, symbol, span=1month

과거 K라인;span 지원 1day / 1week / 1month / 1year / 5year

포지션 / 자산 / 주문(portfolio.py)

도구

매개변수

설명

get_positions

—

현재 포지션 목록(손익 포함)

get_assets

—

계좌 자산(현금, 시가, 총자산 등)

get_orders

status=OPEN, limit=20

주문 목록;status 지원 OPEN / FILLED / CANCELLED / ALL

get_order

order_id

개별 주문 상세

cancel_order

order_id

미체결 주문 취소

거래(trade.py)

도구

매개변수

설명

create_order

symbol, market, side, order_type, quantity, price?, validity

거래 주문 생성(제출)

  • order_type:MARKET_ORDER(시장가)/ LIMIT_ORDER(지정가,price 필요)。

  • side:BUY / SELL;validity:GOOD_FOR_DAY / GOOD_TILL_CANCELLED。

지식베이스(knowledge.py)

도구

매개변수

설명

search_knowledge_base

query, language=zh-Hans, top=10

플랫폼 지식베이스 검색(개좌, 입출금, 거래 규칙 등 QA)

  • language:zh-Hans / zh-Hant / en;top 범위 3~20。

  • 실제 프로젝트는 보통 백엔드에서 벡터 검색 + 의미 정렬을 수행합니다(예: Azure Cognitive Search, Elasticsearch, Milvus 등),본 데모는 특정 구현에 구속되지 않습니다.

각 도구에는 decorators.py의 log_tool 데코레이터가 적용되어,호출자(API key에 해당하는 client_id)、입력 매개변수 및 소요 시간 로그를 일괄 출력합니다. 새 도구 추가 시 해당 모듈 register(mcp) 내에서 @mcp.tool + @log_tool로 선언하고, tools/__init__.py의 register_tools()에 등록합니다.

실행

pip install -r requirements.txt

cp .env.example .env   # 按需修改 API key、后端地址
python -m broker_mcp_demo

기본적으로 0.0.0.0:8000을 리슨하며,MCP 엔드포인트는 /mcp,헬스체크는 /health입니다.

구성

모든 설정은 환경 변수(접두사 BROKER_MCP_)또는 .env로 주입하며,.env.example 참고:

변수

설명

BROKER_MCP_API_KEYS

필수(인증 비활성화 시 제외)。쉼표로 구분,각 항목은 key 또는 key:client_id 형식,예: demo-key-1:alice,demo-key-2:bob

BROKER_MCP_BACKEND_BASE_URL

다운스트림 증권사 백엔드 루트 주소(데모는 실제 주소 미내장,직접 구성);비워두면 도구가 예시 데이터 반환

BROKER_MCP_HOST / BROKER_MCP_PORT

리슨 주소 / 포트,기본 0.0.0.0:8000

BROKER_MCP_TRANSPORT

http(기본)또는 stdio

BROKER_MCP_AUTH_DISABLED

true로 설정 시 인증 비활성화,로컬 디버깅 전용

BROKER_MCP_BACKEND_TIMEOUT

다운스트림 요청 타임아웃(초),기본 30

클라이언트 연동

Claude Code를 예로 들면(HTTP 모드 + API key):

claude mcp add --transport http broker-demo http://localhost:8000/mcp \
  --header "Authorization: Bearer demo-key-1"

또는 MCP 클라이언트의 JSON 설정에서:

{
  "mcpServers": {
    "broker-demo": {
      "type": "http",
      "url": "http://localhost:8000/mcp",
      "headers": {
        "Authorization": "Bearer demo-key-1"
      }
    }
  }
}

stdio 모드

로컬 디버깅용으로,stdin/stdout을 사용하며 인증을 활성화하지 않습니다:

BROKER_MCP_TRANSPORT=stdio python -m broker_mcp_demo

디렉터리 구조

src/broker_mcp_demo/
├── __main__.py     入口(python -m broker_mcp_demo)
├── config.py       环境变量 / .env 配置读取
├── auth.py         API key 鉴权(ApiKeyVerifier)
├── identity.py     从鉴权上下文解析 client_id
├── backend.py      下游后端 HTTP 调用封装(未配置地址时回退示例数据)
├── server.py       FastMCP 实例装配
└── tools/          MCP 工具
    ├── __init__.py     register_tools() 注册入口
    ├── decorators.py   log_tool 计时日志装饰器
    ├── market.py       行情
    ├── portfolio.py    持仓 / 资产 / 订单
    ├── trade.py        下单
    └── knowledge.py    平台知识库搜索

License

Apache-2.0

Related MCP Connectors

Related MCP Servers