@wsvc/prrm-mcp
一个独立的MCP(模型上下文协议)服务器,代理对PRRM(投资组合研究和风险管理)REST API的工具调用。它不需要数据库连接,也不需要PRRM代码库依赖关系——只需要两个环境变量和一个正在运行的PRRM服务器。
建筑
+--------------+ stdio +------------------+ HTTPS +--------------+
| Claude Code | ------------ | prrm-mcp-client | ---------- | PRRM VPS |
| / OpenClaw | | (this package) | | /api/v1/* |
+--------------+ +------------------+ +--------------+
MCP服务器通过stdio与AI代理通信,并通过HTTP(S)将每个工具调用转发到PRRM REST API。所有响应都从标准中展开 { data: ... } 信封,并作为JSON文本内容返回。
快速开始
选项A:从npm安装(如果已发布)
# Run directly with npx (no install required)
PRRM_BASE_URL=https://prrm.example.com PRRM_API_TOKEN=your-token npx @wsvc/prrm-mcp
# Or install globally
npm install -g @wsvc/prrm-mcp
PRRM_BASE_URL=https://prrm.example.com PRRM_API_TOKEN=your-token prrm-mcp
选项B:从GitHub安装
如果包没有发布到npm,你可以直接从GitHub仓库安装:
# Install globally from GitHub (uses the packages/mcp-client directory)
npm install -g github:wsvc/Vibe-PRRM-MCP
# Or add to a project
npm install github:wsvc/Vibe-PRRM-MCP
您还可以在本地克隆和构建:
git clone https://github.com/wsvc/Vibe-PRRM-MCP.git
cd Vibe-PRRM-MCP/packages/mcp-client
npm install
npm run build
npm link # makes 'prrm-mcp' available globally on your machine
# Then run it anywhere
PRRM_BASE_URL=https://prrm.example.com PRRM_API_TOKEN=your-token prrm-mcp
使用Claude代码进行配置
将以下内容添加到您的 claude_desktop_config.json 或 .claude.json.
从npm安装时:
{
"mcpServers": {
"prrm": {
"command": "npx",
"args": ["@wsvc/prrm-mcp"],
"env": {
"PRRM_BASE_URL": "https://prrm.example.com",
"PRRM_API_TOKEN": "your-agent-token"
}
}
}
}
从本地克隆安装时(调整克隆位置的路径):
{
"mcpServers": {
"prrm": {
"command": "node",
"args": ["C:/path/to/Vibe-PRRM-MCP/packages/mcp-client/dist/index.js"],
"env": {
"PRRM_BASE_URL": "https://prrm.example.com",
"PRRM_API_TOKEN": "your-agent-token"
}
}
}
}
使用OpenClaw进行配置
将以下内容添加到您的 openclaw.json:
{
"mcpServers": {
"prrm": {
"command": "npx",
"args": ["@wsvc/prrm-mcp"],
"env": {
"PRRM_BASE_URL": "https://prrm.example.com",
"PRRM_API_TOKEN": "${DOLLAR_BILL_PRRM_TOKEN}"
}
}
}
}
环境变量
| 变量 | 必填 | 描述 |
|---|
PRRM_BASE_URL | 是 | PRRM服务器的基本URL(例如。 https://prrm.example.com 或 http://IP:3000) |
PRRM_API_TOKEN | 是 | API身份验证的承载令牌,在PRRM设置中创建 |
PRRM_MCP_DEBUG | 否 | 设置为 true 将所有带有时间戳的API调用记录到stderr |
工具目录
该服务器在12个模块中公开了136个工具。每个工具都将1:1(对于合并的列表/获取工具为1:多)映射到PRRM REST API端点。
战略(3个工具)
| 工具 | 说明 |
|---|
get_strategy | 获取当前投资策略,或设置versionId时的历史版本。警告:历史版本缺少updatedAt字段。 |
get_strategy_versions | 列出投资策略文件的所有版本 |
update_strategy | 用新内容更新投资战略文件 |
仪器(8个工具)
| 工具 | 说明 |
|---|
search_prrm_instruments | 按名称、资产类别、状态或部门搜索PRRM工具 |
get_instrument | 通过ID获取特定仪器的详细信息 |
create_instrument | 在系统中创建新仪器 |
update_instrument | 更新现有仪器上的字段 |
add_external_id | 向仪器添加外部标识符 |
remove_external_id | 从仪器中删除外部标识符 |
search_borsdata_instruments | 在Borsdata搜索要导入的仪器 |
search_yahoo_instruments | 在雅虎财经搜索要导入的工具 |
评论(2个工具)
| 工具 | 说明 |
|---|
get_comments | 获取仪器或研究报告的评论 |
add_comment | 在工具或研究报告中添加评论 |
筛选与宇宙(32个工具)
| 工具 | 说明 |
|---|
list_screening_profiles | 列出筛选配置文件,或在设置id时获取一个 |
create_screening_profile | 使用标准和阈值创建新的筛选配置文件 |
update_screening_profile | 更新现有的筛查档案 |
delete_screening_profile | 删除筛选配置文件 |
run_screen | 执行筛选配置文件以查找匹配的仪器 |
evaluate_instrument_against_profile | 根据配置文件的标准评估单个仪器 |
get_screen_results | 从已完成的筛查中获取结果 |
create_instruments_from_screening | 根据筛选运行结果创建仪器 |
get_available_kpis | 获取筛选标准的可用KPI |
get_screening_classifications | 获取可用的筛查分类 |
get_universe | 获取当前宇宙(无参数)或过滤后的宇宙(有参数) |
update_universe_entry | 标记或关闭宇宙中的某个仪器 |
list_intersection_configs | 列出交叉点配置,或在设置id时获取一个 |
create_intersection_config | 创建结合多个配置文件的交叉口配置 |
update_intersection_config | 更新交叉口配置 |
delete_intersection_config | 存档交叉口配置 |
run_intersection | 运行屏蔽交叉管道 |
list_intersection_runs | 列出配置的运行(使用configId),或获取单个运行(使用runId) |
get_intersection_diff | 比较两个交叉路口的运行情况,看看有什么变化 |
list_universe_versions | 列出宇宙版本,或在设置id时获取一个版本。警告:list返回包装好的{data:\[…\]},single返回裸对象。 |
get_universe_diff | 比较两个宇宙版本,看看有什么变化 |
get_universe_staleness | 检查当前宇宙有多陈旧 |
get_position_alerts | 获取宇宙的位置级别警报 |
get_universe_overrides | 获取宇宙中的主动手动覆盖 |
create_universe_override | 将手动超控仪器直接添加到宇宙中 |
bulk_create_instruments | 从宇宙版本批量创建乐器 |
propose_universe | 从交叉口管路创建宇宙方案 |
get_proposal | 通过ID获取宇宙提案 |
update_proposal_instrument | 切换宇宙提案中的仪器包含 |
add_override_to_proposal | 在提案中添加手动超控仪表 |
remove_override_from_proposal | 从提案中删除手动覆盖 |
commit_universe | 提交宇宙提案,取代活跃的宇宙 |
研究(4种工具)
| 工具 | 说明 |
|---|
list_research_reports | 列出研究报告,或在设置id后获取一份 |
create_research_report | 创建新的研究报告(仪器ID在创建后是可变的) |
update_research_report | 更新现有研究报告 |
search_research_semantic | 跨研究报告的语义搜索 |
估值(15种工具)
| 工具 | 说明 |
|---|
list_valuation_models | 列出模型,或在设置id时获取一个模型 |
create_valuation_model | 创建新的估值模型模板 |
update_valuation_model | 更新现有估值模型 |
list_valuations_by_instrument | 列出工具的估值输出(带instrument_id),或获取一个(带id) |
autofill_valuation | 自动填充来自Borsdata的估值输入。返回{inputs,sources}——将autofill.inputs(不是包装器)传递给create_scenario |
list_scenarios | 列出仪器的场景(带instrumentId),或获取一个(带id) |
create_scenario | 创建新的估值场景(需要输入数据和作者) |
update_scenario | 更新现有的估值方案 |
delete_scenario | 删除估价方案 |
copy_scenario | 创建现有场景的副本 |
execute_scenario | 执行估值方案以产生输出 |
get_scenario_history | 获取场景的版本历史记录 |
what_if_valuation | 对场景进行一次性假设分析 |
compare_scenarios | 并排比较多个场景 |
export_scenarios_to_ic | 将场景导出到IC会议议程 |
投资委员会(16种工具)
| 工具 | 说明 |
|---|
create_ic_meeting | 召开新的投资委员会会议 |
update_ic_meeting | 更新IC会议(状态和/或日期) |
list_ic_meetings | 列出IC会议,或在设置id时获取一个会议 |
add_agenda_item | 向会议添加议程项目 |
update_agenda_item | 更新现有议程项目 |
remove_agenda_item | 删除议程项目 |
reorder_agenda_items | 设置议程项目的显示顺序 |
list_prereads | 列出议程项目的预读内容,或在设置prereadId时获取预读内容 |
post_preread | 在议程项目后附上一份预读文件 |
update_preread | 更新现有的预读 |
delete_preread | 删除预读内容 |
post_minutes | 发布IC会议纪要 |
update_minutes | 更新现有分钟数 |
record_decision | 记录IC决策 |
update_decision_status | 更新决策状态(待定/已执行/已取消) |
list_decisions | 使用可选过滤器列出IC决策 |
投资组合(30种工具)
| 工具 | 说明 |
|---|
register_trade | 在投资组合中注册新交易 |
get_positions | 获取所有当前投资组合头寸 |
get_position | 获取特定仪器的位置详细信息 |
update_position_price | 更新投资组合头寸的价格 |
assign_position_sleeve | 为子投资组合套筒分配一个位置 |
get_trade_history | 获取交易历史记录,可选择按工具过滤 |
get_portfolio_summary | 获取包括资产净值、回报和关键指标在内的高级投资组合摘要 |
get_allocation | 获取投资组合分配明细 |
get_fx_exposure | 获取投资组合外汇敞口明细 |
update_trade | 更新现有交易 |
delete_trade | 从投资组合中删除交易 |
get_cash_balances | 获取不同货币的现金余额 |
record_deposit | 记录现金存款 |
record_withdrawal | 记录现金提款 |
get_cash_transactions | 使用可选过滤器列出现金交易 |
update_cash_transaction | 更新现金交易 |
delete_cash_transaction | 删除现金交易 |
get_portfolio_config | 获取投资组合配置 |
update_portfolio_config | 更新投资组合配置 |
get_dividends | 使用可选过滤器列出股息 |
record_dividend | 记录股息支付 |
sync_dividends | 同步Borsdata的股息 |
import_portfolio | 导入投资组合数据 |
import_transactions | 从外部来源导入交易 |
get_margin_summary | 获取利润利用率摘要 |
get_realised_pnl | 从已平仓头寸中实现损益 |
list_sub_portfolios | 列出子投资组合(无参数),获取一个(带id),或获取摘要(带summary:true) |
create_sub_portfolio | 创建新的子投资组合 |
update_sub_portfolio | 更新子投资组合 |
delete_sub_portfolio | 删除子投资组合 |
性能(8个工具)
| 工具 | 说明 |
|---|
get_performance_summary | 获取给定时期的投资组合绩效摘要 |
get_return_series | 获取投资组合和基准回报时间序列 |
get_performance_attribution | 按职位、行业或货币获取绩效归因 |
get_drawdown_analysis | 获取投资组合缩减分析 |
get_benchmark_config | 获取当前基准配置 |
set_benchmark | 设定绩效比较的基准工具 |
list_performance_reports | 列出性能报告,或在设置id时获取一个 |
create_performance_report | 创建新的绩效报告 |
风险(13种工具)
| 工具 | 说明 |
|---|
publish_risk_report | 发布新的风险报告 |
list_risk_reports | 列出风险报告,或在设置id时获取一个 |
get_risk_dashboard | 获取包含关键指标和警报的当前风险仪表板 |
get_alert_config | 获取当前风险警报触发器配置 |
create_risk_alert_trigger | 创建新的风险警报触发器 |
update_risk_alert_trigger | 更新现有风险警报触发器 |
delete_risk_alert_trigger | 删除风险警报触发器 |
list_risk_alert_events | 列出风险警报事件 |
acknowledge_risk_alert_event | 确认风险警报事件 |
get_risk_analytics | 获取投资组合风险指标(VaR、CVaR、波动率) |
get_risk_contributions | 获得每个头寸的风险贡献 |
get_correlation_matrix | 获取位置相关矩阵 |
run_prrm_stress_test | 对PRRM组合运行压力测试场景(从Run_stress_test重命名以避免与组合优化器冲突) |
通知(4个工具)
| 工具 | 说明 |
|---|
get_notifications | 使用可选筛选器获取通知 |
get_unread_notification_count | 获取未读通知的计数 |
mark_notification_read | 将特定通知标记为已读 |
mark_all_notifications_read | 将所有通知标记为已读 |
平台(1个工具)
| 工具 | 说明 |
|---|
global_search | 搜索所有PRRM实体(仪器、研究、会议等) |
MCP资源
服务器公开一个MCP资源:
| URI | 描述 |
|---|
prrm://guide | 一个嵌入式集成指南,涵盖了常见的工作流程,如研究仪器、准备IC会议、监控风险和运行屏幕。 |
错误处理
服务器从不从工具处理程序抛出异常。HTTP错误被转换为文本内容,以便代理可以读取错误并做出适当的反应。
| HTTP状态 | 行为 |
|---|
| 200、201 | 返回 data 响应信封中的字段 |
| 400422 | 返回验证错误消息作为工具结果 |
| 401 | 返回“身份验证失败--检查PRRM_API_TOKEN” |
| 404 | 返回“未找到”消息 |
| 500503 | 从服务器返回错误消息 |
发展
先决条件
- Node.js 18+(使用内置
fetch) - 正在运行的PRRM服务器实例
项目结构
packages/mcp-client/
package.json
tsconfig.json
src/
index.ts # Entry point, MCP server setup, guide resource
api-client.ts # HTTP client wrapper (fetch + auth + error handling)
tools/
strategy.ts # 3 tools
instruments.ts # 8 tools
comments.ts # 2 tools
screening.ts # 32 tools
research.ts # 4 tools
valuation.ts # 15 tools
ic.ts # 16 tools
portfolio.ts # 30 tools
performance.ts # 8 tools
risk.ts # 13 tools
notifications.ts # 4 tools
platform.ts # 1 tool
构建
cd packages/mcp-client
npm install
npm run build # Compiles TypeScript to dist/
以开发模式运行
cd packages/mcp-client
PRRM_BASE_URL=http://localhost:3000 PRRM_API_TOKEN=test npm run dev
这使用 tsx 无需构建步骤即可动态执行TypeScript。
运行构建版本
cd packages/mcp-client
PRRM_BASE_URL=http://localhost:3000 PRRM_API_TOKEN=test npm start
出版
cd packages/mcp-client
npm run build
npm publish --access public
该包发布为 @wsvc/prrm-mcp 并且可以与一起运行 npx @wsvc/prrm-mcp 或全球安装。
许可证
有关许可证信息,请参阅存储库根目录。