离线确定性计算引擎 · 9 工具 · 不含数据 API · 调用方自备数据
MCP 协议
streamable HTTP
无鉴权
https://dram.fincept.top/mcp
| 工具 | 功能 |
|---|---|
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 红线)
在 MCP 配置 JSON 里加:
{
"mcp": {
"dram": {
"type": "remote",
"url": "https://dram.fincept.top/mcp",
"enabled": true
}
}
}
在 claude_desktop_config.json 里加:
{
"mcpServers": {
"dram": {
"type": "url",
"url": "https://dram.fincept.top/mcp",
"transport": "streamablehttp"
}
}
}
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())
npx @modelcontextprotocol/inspector \ --transport streamablehttp \ --url https://dram.fincept.top/mcp
| 工具 | 必输字段 |
|---|---|
dram_s01 | task_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_s05 | task_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 |
{
"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 | 含义 | 调用方动作 |
|---|---|---|
| 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 的系统提示 / 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 喂进去。