DRAM S01-S08 研究 MCP

离线确定性计算引擎 · 9 工具 · 不含数据 API · 调用方自备数据
MCP 协议 streamable HTTP 无鉴权

MCP 端点

https://dram.fincept.top/mcp

工具列表(9 个)

工具功能
dram_s01研究对象构建(5-8 家池 + 证券映射 + 覆盖矩阵)
dram_s02行业周期识别(信号分层 → cycle_state + confidence)
dram_s03产品暴露分析(exact/combined 口径 + product_mix)
dram_s04经营动量分析(share/growth/margin/capex/capacity 特征矩阵)
dram_s05盈利驱动拆解(方向性 price/volume/mix/cost 驱动矩阵)
dram_s06证据核验(claim → evidence_ledger, Inference 不升 Fact)
dram_s07相对盈利弹性排序(业务弹性/证据完整度/置信度 三分离)
dram_s08事件路由(new_event → 局部重跑技能列表 + 版本计划)
dram_skill_doc取技能文字规范(SKILL.md + Card + Contract + Runtime + fixture)

标准用法

1. dram_skill_doc(skill="S0X")  →  拿该技能的 Card/Contract/Runtime/fixture 全文
2. 按 fixture 的 input schema 组装 JSON(调用方自备数据)
3. dram_s0X(input=)  →  拿结构化输出
   输出: { status, outputs, missing_fields, next_actions }

红线(调用方须知)

· input 里的 null 是"数据缺失", 不要填 0
· 输出 status=blocked 时按 missing_fields + next_actions 补数据后重跑
· S07 只出弹性排序, 不出 Buy/Sell 交易建议
· 二手新闻 / proxy 不能升级为"已确认"(S06 红线)

各框架接入

OpenCode
Claude
Python
Inspector

OpenCode / OpenCode-like(远端 MCP)

在 MCP 配置 JSON 里加:

{
  "mcp": {
    "dram": {
      "type": "remote",
      "url": "https://dram.fincept.top/mcp",
      "enabled": true
    }
  }
}

Claude Desktop / Claude Code

在 claude_desktop_config.json 里加:

{
  "mcpServers": {
    "dram": {
      "type": "url",
      "url": "https://dram.fincept.top/mcp",
      "transport": "streamablehttp"
    }
  }
}

Python(不挂框架,直调)

import json, asyncio
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client

async def main():
    async with streamablehttp_client(
        "https://dram.fincept.top/mcp") as (r, w, _):
        async with ClientSession(r, w) as s:
            await s.initialize()

            # 1) 先读规范
            doc = json.loads(
                (await s.call_tool(
                    "dram_skill_doc", {"skill": "S05"}
                )).content[0].text)
            print(doc["card"][:300])

            # 2) 喂数据算
            s05 = json.load(open("s05_input.json"))
            out = json.loads(
                (await s.call_tool(
                    "dram_s05", {"input": json.dumps(s05)}
                )).content[0].text)
            print(out["status"],
                  out["outputs"]["driver_matrix"][0]["drivers"])

asyncio.run(main())

MCP Inspector(浏览器调试)

npx @modelcontextprotocol/inspector \
  --transport streamablehttp \
  --url https://dram.fincept.top/mcp

输入 Schema 速查

工具必输字段
dram_s01task_id, product_node_count=1, companies[], inputs{product_id, market_scope, as_of, ranking_mode, company_ids[], period, start_period, end_period, feature_set[], time_window, signal_min_count}
dram_s02同 S01 + signals[](每条需 kind∈growth/price/supply/news/market, source, period, metric, direction∈up/down/flat, evidence)
dram_s03同 S01(inputs 需 company_ids+period)
dram_s04同 S01(inputs 需 company_ids+start_period+end_period+feature_set)
dram_s05task_id, inputs{product_id, company_ids[], start_period, end_period, driver_mode, cycle_state{}, exposure_features[], operating_feature_matrix[], driver_matrix[], claim_list[], evidence_summary[], new_event{}, research_state{}} + 顶层 evidence_catalog[]
dram_s06同 S05(读 claim_list+evidence_catalog)
dram_s07同 S05(读 cycle_state/exposure/operating/driver_matrix/evidence_summary)
dram_s08同 S05 + inputs.new_event + inputs.research_state

companies[] 字段(S01/S03/S04)

{
  "company_id": "C001",
  "name": "长鑫科技",
  "security_id": "688825.SH",
  "exposure_type": "exact",       // exact | combined
  "ratio": 0.98,                  // exact 口径 DRAM 收入占比
  "combined": null,               // combined 口径总占比
  "share": 0.0743,                // 2025 市占率
  "previous_share": 0.0397,       // 2024 市占率
  "yoy": 9.77,                    // 营收 YoY
  "gross_margin": 0.0558,
  "net_margin": -0.37,
  "capex": 95.93,                // 亿元
  "fab_records": 3,
  "product_mix": {"LPDDR": 0.66, "DDR": 0.32}
}

输出 status 语义

status含义调用方动作
success 全部通过 直接消费 outputs
partial 有 missing 但可出结果 看 missing_fields, 标注数据缺口后消费
blocked 必输字段缺失 按 next_actions 补数据重跑

数据从哪来

MCP 纯离线,不调外部 API。调用方自备数据(行情/财务/市占率/capex/fab),按 schema 喂进去。本仓库现成的 live 数据源:

· /root/dram skill/存储芯片案例用数据.xlsx(14 张表)
· 解析产物: /tmp/opencode/dramx/inputs/s01_input.json
            /tmp/opencode/dramx/inputs/s02_input.json
            /tmp/opencode/dramx/inputs/s05_input.json(S05-S08 共用)

给外部 agent 的接入提示词 可整段复制

把下面整段贴进外部 agent 的系统提示 / onboarding 消息,它即可自行接入并调用本 MCP:

# DRAM S01-S08 研究 MCP

## 端点
- URL: https://dram.fincept.top/mcp
- 协议: MCP, streamable HTTP transport
- 鉴权: 无
- 9 工具: dram_s01~dram_s08(离线计算) + dram_skill_doc(取规范文档)

## 标准用法(先读规范,再喂数据)
1. dram_skill_doc(skill="S0X")  →  拿该技能的 Card/Contract/Runtime/fixture 全文
2. 按 fixture 的 input schema 组装 JSON(调用方自备数据, MCP 不取数)
3. dram_s0X(input=)  →  拿结构化输出 { status, outputs, missing_fields, next_actions }

## 红线(每个工具都遵守)
- input 里的 null 是"数据缺失", 不要填 0
- 输出 status=blocked 时按 missing_fields + next_actions 补数据重跑
- 不输出 Buy/Sell 交易建议, 只出研究结论

## 输入 schema(各工具必输字段)
- dram_s01: task_id, product_node_count=1, companies[], inputs{product_id="DRAM", market_scope, as_of, ranking_mode, company_ids[], period, start_period, end_period, feature_set[], time_window, signal_min_count}
- dram_s02: 同 S01 + signals[](每条需 kind∈growth/price/supply/news/market, source, period, metric, direction∈up/down/flat, evidence)
- dram_s03: 同 S01(inputs 需 company_ids + period)
- dram_s04: 同 S01(inputs 需 company_ids + start_period + end_period + feature_set)
- dram_s05: task_id, inputs{product_id, company_ids[], start_period, end_period, driver_mode="directional", cycle_state{}, exposure_features[], operating_feature_matrix[], driver_matrix[], claim_list[], evidence_summary[], new_event{}, research_state{}, research_project_id, current_version} + 顶层 evidence_catalog[]
- dram_s06: 同 S05(读 claim_list + evidence_catalog)
- dram_s07: 同 S05(读 cycle_state / exposure / operating / driver_matrix / evidence_summary)
- dram_s08: 同 S05 + inputs.new_event + inputs.research_state

## companies[] 字段(S01/S03/S04)
{ "company_id":"C001","name":"长鑫科技","security_id":"688825.SH","exposure_type":"exact","ratio":0.98,"share":0.0743,"previous_share":0.0397,"yoy":9.77,"gross_margin":0.0558,"net_margin":-0.37,"capex":95.93,"fab_records":3,"product_mix":{"LPDDR":0.66,"DDR":0.32} }
  - exposure_type: exact | combined
  - combined 口径用 combined 字段(如三星 0.39), exact 口径用 ratio

## 各框架接入配置
- OpenCode: { "mcp": { "dram": { "type":"remote", "url":"https://dram.fincept.top/mcp", "enabled":true } } }
- Claude Desktop: { "mcpServers": { "dram": { "type":"url", "url":"https://dram.fincept.top/mcp", "transport":"streamablehttp" } } }
- Python:
    from mcp import ClientSession
    from mcp.client.streamable_http import streamablehttp_client
    async with streamablehttp_client("https://dram.fincept.top/mcp") as (r,w,_):
        async with ClientSession(r,w) as s:
            await s.initialize()
            out = json.loads((await s.call_tool("dram_s01", {"input": json.dumps(s01)})).content[0].text)

## 输出 status 语义
- success: 直接消费 outputs
- partial: 看 missing_fields, 标注数据缺口后消费
- blocked: 按 next_actions 补数据重跑

## 数据
MCP 纯离线, 不调外部 API。调用方自备数据(行情/财务/市占率/capex/fab), 按 schema 喂进去。