occulytics
Occulytics MCP 服务器
一个 MCP 服务器,让 AI 助手能够为医疗保健 REIT 资产管理团队(Omega Healthcare Investors)回答投资组合问题,基于两个公开来源:Omega 的 SEC 10-K 文件和 CMS 养老院提供者信息文件。
根据简报的设计目标:服务器必须能够说明答案是完整、不确定或不支持——以及原因,而不是产生一个没有依据的自信数字。每个工具都在一个信封内返回确定性数据,该信封带有计算出的状态、注意事项和来源。
快速开始
所有内容均可离线运行——数据工件已提交。
npm install
npm run build
npm test # 41 tests: curated-data checksums, domain units, full e2e over MCP在 UI 中试用(MCP Inspector 会在浏览器中打开):
npm run inspect连接到 Claude Code:包含一个项目范围的 .mcp.json——在 npm run build 之后在 Claude Code 中打开此仓库,occulytics 服务器即可使用。或者全局注册:
claude mcp add occulytics -- node /absolute/path/to/occulytics-mcp/dist/src/server/index.js连接到 Claude Desktop(claude_desktop_config.json):
{
"mcpServers": {
"occulytics": {
"command": "node",
"args": ["/absolute/path/to/occulytics-mcp/dist/src/server/index.js"]
}
}
}演示前检查编译后的服务器是否能在真实 stdio 上工作:npm run smoke。
要从实时来源刷新数据:npm run ingest(参见 数据管道)。
Related MCP server: Medical Billing MCP
你可以问什么
五个目标问题,以及服务器实际做什么:
问题 | 答案路径 | 诚实的结果 |
按投资百分比排名前五的运营商,以及每个运营商运营多少设施? |
| 设计上部分:Omega 在 FY2020 10-K 之后停止了完整的运营商表格。你得到完整的 FY2020 排名(包括租赁/抵押分解——包括 Ciena,而不是 Consulate,在包含抵押时实际上是第一名)以及 FY2025 的具名披露(Maplewood ≥10%,CommuniCare 7.2%),每个都注明日期,绝不混合。“实际运营” = 实时 CMS 连锁计数。 |
前几大运营商的设施中低于全国人员配备平均水平的比例? |
| 按运营商计算,并在服务器端针对全国平均值(3.86 报告护士 HPRD)进行汇总。无法映射的运营商会具名并排除,而不是静默丢弃。 |
最大运营商的平均星级和两年趋势? |
| 对 Maplewood 不支持(按投资额最大):它运营老年生活社区,这些社区不是 CMS 认证的养老院——服务器会说明这一点及原因。对于 CommuniCare(按收入最大):平均 3.05 星,在 117 个设施的恒定面板上从 2.26 → 3.04 改善(2024 年 7 月 → 2026 年 7 月)。 |
投资组合入住率? |
| 一个标记的代理:Omega 既不披露入住率也不披露设施列表。按床位加权的入住率跨映射的运营商连锁(83.5% 对比全国 80.5%),并带有覆盖核算——代理实际代表投资组合的多少份额,以及谁被排除(英国运营商、Maplewood、低置信度映射)。 |
关于最大运营商的一段式风险简报? |
| 模型写段落;服务器只提供确定性事实:≥10% 的投资,6.6%/5.2%/5.4% 的收入趋势,$12.5M 终止费说明,以及 CMS 覆盖缺口。 |
架构
三层,一个依赖方向,无数据库,无运行时网络:
scripts/ingest.ts CMS download → validate → project → data/processed/*.json (committed)
data/curated/*.json Hand-transcribed 10-K facts + operator→CMS map, per-fact citations
│
src/domain/ Pure, deterministic, unit-tested: store, resolve, metrics
│
src/server/ MCP wiring: 9 tools + 1 resource → envelope responses (stdio)data/curated/omega-10k.json— FY2025 投资组合摘要 + 集中度说明,FY2020 运营商投资表。每个块都引用其文件/章节。data/curated/operator-map.json— 诚实性的支柱:每个 Omega 运营商的 CMS 映射,带有method(连锁精确 / 法律名称模式 / 策划别名)、confidence(高/中/低)和注意事项;无法映射的运营商记录原因。src/domain/metrics.ts— 所有算术:排名、入住率、基准比较、恒定面板星级趋势。没有数字留给模型。src/server/tools.ts— 薄层:验证输入(zod),调用领域,包装在信封中。
答案信封
每个工具返回:
{
"status": "complete" | "partial" | "unsupported", // brief's complete / uncertain / unsupported
"data": { /* deterministic numbers & records, never prose */ },
"caveats": [ /* why partial; staleness; method notes — computed, not decorative */ ],
"provenance": [ { "source", "asOf", "detail", "url" } ],
"cost": { "chars", "estTokens", "basis" } // self-reported payload size, labeled estimate
}status 是从数据路径计算出来的,而不是硬编码的:未映射的运营商产生 unsupported,并带有映射条目记录的原因;任何涉及 FY2020 表的内容都是 partial,并带有过时注意事项;入住率代理始终是 partial。
工具表面
工具 | 返回 | 原始或已解析? |
| FY2025 总计、组合、地理 + 具名运营商集中度 | 已解析的事实,按文件 |
| 两个带日期的排名块(FY2020 完整 / FY2025 具名) | 已解析;百分比从文件中的美元计算 |
| 名称 → 规范运营商 + CMS 映射 + 置信度 + 10-K 上下文(FY2020 排名/%,FY2025 披露的 %) | 元数据 |
| 分页设施行 + 全人口摘要 | 原始行 + 已解析摘要 |
| 星级(平均值 + 每星级分布)、人员配备对比全国、入住率,以及所有三个的 2 年恒定面板趋势;多运营商的汇总块 | 已解析(所有算术在服务器端) |
| 按 CCN/名称的设施钻取:当前指标、每个快照的历史、反向 Omega 运营商关联 | 原始详情 + 已解析关联 |
| 代理入住率 + 2 年趋势 + 覆盖核算 | 已解析,明确标记为代理 |
| 全国人员配备/星级/入住率参考 + 方法 | 已解析 |
| 来源、年份、映射、已知缺口(也是 | 元数据 |
粒度理由:工具是问题形状的但可组合——确定性聚合(其中 LLM 对 100+ 行的算术是正确性风险)是工具的责任;叙述综合是模型的。每个接受运营商的工具都接受自由文本并在内部解析,因此客户端永远不需要两步协议;解析失败是一个 unsupported 答案(带有候选和已知宇宙),而不是错误。
跨源问题(10-K 部分 ↔ CMS 部分)是一等公民:运营商身份是连接键,经过往返验证(10-K 排名中的每个名称在每个 CMS 支持的工具中都能解析——端到端测试),每个已解析的运营商块都嵌入其 10-K 上下文(omegaContext:FY2020 排名和投资组合百分比,FY2025 披露的集中度),因此“我们最大的运营商有多好?”这类问题无需第二次调用即可解析。
关键决策与权衡
1. 两个年份,绝不混合。 决定性的研究发现:Omega 在 FY2020 之后的 10-K 中没有包含按运营商的投资表——FY2025 文件仅点名 Maplewood(≥10% 的投资)和 CommuniCare(7.2%)。因此,当前的“前五”无法完全从具名来源支持,服务器正是这样说的:排名以两个单独日期的块呈现,状态为 partial 并带有原因。权衡:不如一个干净的列表令人满意;选择它是因为混合列表在数值上是不连贯的(2020 年美元与 2025 年百分比在不同分母上)。
2. 手工转录的 SEC 事实,机器摄入的 CMS 数据。 Omega 的事实是两个不同格式文件中的两个表中的约 30 个数字。在这个范围内,通用的 10-K 解析器具有本简报最糟糕的失败模式——静默错误的提取。相反:策划的 JSON 带有每个事实的引用,由校验和测试保护(每个可求和列必须重现文件自己的小计和总计——一个打错的数字会导致构建失败)。CMS 侧(14,693 行 × 3 个月度年份)完全自动化并带有验证,因为规模使自动化成为更安全的选择。权衡:为新 10-K 刷新是手动编辑;对于年度提交的文件,这是可接受的。
3. 运营商→CMS 连接是策划的、带置信度标签的工件。 两个数据集都不引用对方。连接(10-K 运营商名称 → CMS 连锁)是系统中最有风险的推断,因此它是数据,而不是代码:每个映射记录它是如何制作的以及应该信任多少,无法映射的运营商记录原因(Maplewood:老年生活,在 CMS 之外;Healthcare Homes:英国)。低置信度映射(Agemo → Signature)默认从汇总聚合中排除,并在包含时浮出。权衡:不能扩展到数百个 REIT;对一个 REIT 的约 11 个具名运营商是正确的,机制(每个映射的方法/置信度/注意事项)才是可扩展的。
4. 连锁指标是超集,并说明这一点。 Omega 的设施级投资组合不是公开的(已验证:Schedule III 按州汇总)。因此 CMS 指标描述的是运营商的整个运营,而不仅仅是 Omega 的建筑——每个受影响的响应都带有该注意事项,入住率代理报告其覆盖范围代表(FY2020)投资组合的多少份额(约 40%)。权衡:从 CMS 所有权文件重建设施级是可能的,但需要多天的模糊匹配工作;带有覆盖核算的诚实代理是四小时的答案。该重建是自然的下一步。
5. 方法论是答案的一部分。 星级趋势 = 恒定面板(在两个端点快照中均被评级的设施),响应中包含面板规模、排除项和已知偏差(链成员资格仅限当前)。人员配置基准 = 报告的护士总 HPRD,设施均值(即问题所问,未经调整;存在病例组合调整版本,已注明)。入住率 = 日均居民数 ÷ 认证床位,这会低估实际运营入住率(认证床位 > 在用床位)。所有这些都在载荷中说明,而不仅仅是在这里。
6. 内存 JSON,无数据库,产物已提交。 1.5 万行毫秒级加载;数据库为零查询需求增加了运维面。已提交的产物(约 6MB)意味着安装 → 构建 → 演示无需网络即可运行——实时演示不会因 CMS 宕机或下载 URL 变更而中断。代价:仓库携带数据;摄取可随时从来源重新推导。
7. 有界输出。 设施列表分页(默认 25),带有始终完整的摘要块和总数——185 个设施的连锁集团永远不会淹没客户端上下文。
测试
tests/curated.test.ts— 对照申报文件自身总计的转录校验和。tests/metrics.test.ts、tests/resolve.test.ts— 基于固定数据的领域单元(精确值)。tests/e2e.test.ts— 通过内存传输层连接真实数据的真实 MCP 客户端:每个演示问题一个测试,包括不支持的路径。npm run smoke— 从外部工作目录通过真实 stdio 运行编译后的服务器。
效率与 token 成本
npm run cost 衡量 LLM 客户端在每个演示问题上支付的上下文成本(工具结果文本 + 一次性工具模式),完全离线。Token 数字为估算值(字符数 ÷ 4;真实分词器偏差 ±20%)——其价值在于相对成本和回归跟踪。
当前测量值(已提交产物):
问题 | 调用次数 | 估算 token |
Q1 前 5 + 设施数量 | 2 | ~4.1k |
Q2 人员配置低于全国 | 1 | ~3.0k |
Q3 最大运营商星级 + 趋势 | 2 | ~1.9k |
Q4 组合入住率 | 1 | ~1.0k |
Q5 敞口简报 | 2 | ~1.4k |
五问题会话 | 8 | ~11.4k(+ ~3.2k 一次性模式) |
每个响应还会打上自己的 cost 块({chars, estTokens, basis}),以便助手可以引用答案在上下文中花费的成本——标记为估算值,因为真实分词发生在客户端,服务器永远看不到(在 Claude Code 中,/cost 和 /context 在会话级别仍是事实依据)。
两个刻意的优化使其保持精简(经测量,相比朴素版本减少 31%):面向模型的文本镜像为紧凑 JSON(仅美化打印的空白就约占载荷的 26%),重复的方法论字符串在每个响应的信封注意事项中只出现一次,而不是出现在每个趋势块上。设施列表分页;摘要始终为全量数据。成本戳本身每个响应增加约 21 个 token——经测量,为了可见性值得。
数据管道
npm run ingest 下载并重建 data/processed/:
从 CMS PDC 元存储 API 解析当前 Provider Information CSV URL(文件 URL 每月变化),下载该文件及两个归档快照(2024 年 7 月、2025 年 7 月)用于趋势分析。
验证(行数、必需列(含 CMS 2024→2025 列重命名的表头别名)、评级范围、空值率)——失败时大声报错,绝不写入部分产物。
投影为三个产物:按设施切片、CCN→评级历史、全国基准(方法记录在文件中)。
原始下载缓存在 data/raw/(已 gitignore);--force 重新下载。
仓库结构
data/curated/ hand-verified 10-K facts + operator map (source-cited, checksummed)
data/processed/ generated CMS artifacts (committed; rebuild with npm run ingest)
scripts/ ingest.ts, stdio-smoke.mjs
src/domain/ types, store, resolve, metrics — pure & unit-tested
src/server/ MCP tools + entry (stdio)
tests/ checksums, units, e2e
docs/ PLAN.md (build plan + audit trail), DEMO.md (presentation script)已知限制与后续步骤
Omega 拥有的设施无法单独识别 → 运营商连锁代理(下一步:交叉对照 CMS Ownership 文件的物业公司记录)。
当年运营商排名本质上不完整(披露于 FY2020 停止);Omega 的季度补充材料可以缩小这一差距,但不在简报的资料来源范围内。
趋势(星级、人员配置、入住率)使用两个端点快照 + 一个中点;更多月度快照可使其更平滑。
英国设施(占房地产的 17.7%)没有 CMS 等效的摄取(CQC 将是类似的英国来源)。
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI-powered analysis of healthcare market segments, product comparisons, and sales data insights using natural language processing and retrieval-augmented generation.2
- AlicenseAqualityCmaintenanceEnables AI assistants to look up medical billing codes, denial reasons, and payer rules for faster claim resolution.66MIT
- FlicenseNot gradedqualityCmaintenanceEnables document search, grounded question answering, summarization, patient timeline extraction, and PHI redaction for healthcare documents using retrieval-augmented generation.
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to query organizational architecture and governance constraints, returning evidence-grounded answers from documented structures.MIT
Related MCP Connectors
Certified SEC EDGAR fact memory for AI agents with zero hallucination and filing provenance.
Provide AI assistants with real-time access to official SEC EDGAR filings and financial data. Enab…
Deterministic compliance and vertical knowledge bases for autonomous agents. Free 24hr trial.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/siddak1234/occulytics-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server