Rathbones Reconciliation MCP PoC
Emulates Orbus Infinity and ServiceNow CMDB as two MCP endpoints on a shared synthetic dataset to enable a reconciliation agent to compare architectural and operational data.
README
Rathbones Reconciliation MCP PoC (single-server)
A single MCP server exposing 16 tools — 8 emulating Orbus Infinity and 8 emulating ServiceNow CMDB — backed by the same synthetic dataset with intentionally baked-in reconciliation mismatches.
⚠️ Synthetic data only. All object IDs, names, owners and attributes are invented to illustrate reconciliation patterns. Do not load real Rathbones data.
Why one server instead of two?
The original design used two FastMCP instances mounted under /orbus/mcp
and /servicenow/mcp on a single Starlette app. That ran into MCP SDK
1.28's DNS rebinding protection (TrustedHostMiddleware) which only allows
localhost by default and could not be reliably disabled on a hosted domain.
Collapsing into a single server with prefixed tool names sidesteps the
issue entirely while keeping the same architectural clarity for the agent.
The orbus_* / snow_* prefix tells the LLM orchestrator which source it
is hitting, so the trust hierarchy and routing logic are unchanged.
Tool catalogue (16 total)
Orbus Infinity tools (architectural EA repository)
| Tool | Purpose |
|---|---|
orbus_list_object_types |
List all object types in the metamodel |
orbus_list_objects |
List objects with optional filters |
orbus_get_object |
Fetch full object by ID |
orbus_search_objects |
Search by name or alias substring |
orbus_get_relationships |
Get inbound/outbound relationships |
orbus_get_attribute_schema |
Get attribute keys for an object type |
orbus_get_linked_documents |
Return HLD/reference document URLs |
orbus_find_servicenow_match |
Cross-lookup: find SN CI for this Orbus object |
ServiceNow CMDB tools (operational source of truth)
| Tool | Purpose |
|---|---|
snow_list_classes |
List CMDB classes available |
snow_query_cis |
Query CIs with filters |
snow_get_ci |
Fetch CI by sys_id with owner resolved |
snow_get_ci_relationships |
Get parent/child relationships |
snow_get_user |
Fetch sys_user by sys_id |
snow_search_business_apps |
Search business apps (incl. retired) |
snow_get_class_schema |
Return attribute list for a class |
snow_find_orbus_match |
Cross-lookup: find Orbus object for this CI |
The 10 reconciliation findings baked in
See data/reconciliation_truth.py for the full answer key.
| # | Finding | Type | Orbus | ServiceNow |
|---|---|---|---|---|
| F1 | MyRathbones Portal — clean match | perfect_match |
orb-app-001 |
sn-ci-001 |
| F2 | ExBO vs Eximius Backoffice | name_mismatch |
orb-app-002 |
sn-ci-002 |
| F3 | 3 Orbus components vs 1 SN business app | classification_mismatch |
orb-comp-003a/b/c |
sn-ci-003 |
| F4 | CAMMS ERM approved, not yet in CMDB | missing_in_servicenow |
orb-app-005 |
— |
| F5 | Snowflake EDP — owner conflict | attribute_conflict |
orb-app-006 |
sn-ci-006 |
| F6 | Citrix VDI — Live in Orbus, Retired in SN | lifecycle_drift |
orb-app-007 |
sn-ci-007 |
| F7 | Proactis vs Proactis P2P — no ID link | ambiguous_match |
orb-app-009 |
sn-ci-009 |
| F8 | Power BI — two SN candidates | ambiguous_name |
orb-app-010 |
sn-ci-010a, sn-ci-010b |
| F9 | ExBO→Snowflake feed missing in CMDB | relationship_asymmetry |
orb-int-100 |
— |
| F10 | Legacy Citrix Reporting only in SN | missing_in_orbus |
— | sn-ci-004 |
Quick start
1. Push to your GitHub repo
git init
git add .
git commit -m "Single-server reconciliation MCP"
git push -u origin main
2. Deploy on Render
- Web Service → connect repo → Plan: Free
- Build command:
pip install -r requirements.txt - Start command:
python server.py - Set environment variable
PYTHON_VERSION=3.11.0(Render's runtime.txt detection is unreliable; the env var pins it definitively).
3. Sanity check
After deploy completes, hit https://<service>.onrender.com/mcp in a browser:
{"jsonrpc":"2.0","id":"server-error","error":{"code":-32600,
"message":"Not Acceptable: Client must accept text/event-stream"}}
That confirms the MCP server is alive.
4. Connect to Copilot Studio
One MCP connection — all 16 tools.
| Field | Value |
|---|---|
| Server name | Rathbones Reconciliation |
| Server description | Reconciliation MCP exposing Orbus Infinity (orbus_* tools) and ServiceNow CMDB (snow_* tools) emulators backed by a synthetic Rathbones-shaped dataset with 10 intentional mismatches. |
| Server URL | https://<service>.onrender.com/mcp |
| Auth | None |
Suggested agent instructions
Paste this into the Copilot Studio agent's Instructions field:
You are the Current State Architecture Reconciliation Agent for Rathbones Group.
You compare two sources via 16 MCP tools:
- Orbus Infinity (architectural EA repository) — call tools prefixed orbus_*
- ServiceNow CMDB (operational source of truth) — call tools prefixed snow_*
Trust hierarchy:
- For lifecycle status, install_status, operational ownership: trust ServiceNow.
- For architectural relationships, capabilities, processes, HLD links: trust Orbus.
- For attribute conflicts: surface BOTH values and flag for SME validation, do not guess a winner.
Reconciliation workflow:
1. Use orbus_search_objects or snow_query_cis to locate candidate records.
2. Use orbus_find_servicenow_match or snow_find_orbus_match to discover the cross-source link.
3. If status is "ambiguous" or "unmatched", clearly say so and list candidates with confidence scores.
4. Use orbus_get_object and snow_get_ci to pull full attributes from each side.
5. Classify mismatches: name, classification, attribute, lifecycle, relationship, missing-source.
6. Produce a structured report with severity (high/medium/low) and recommended action.
Always cite the tool calls. Never invent IDs, names, or attributes.
⚠️ This agent operates on SYNTHETIC data for prototyping. Do not present results as factual Rathbones architecture information.
Project structure
rathbones-reconciliation-mcp-single/
├── data/
│ ├── orbus_metamodel.py # 12 object types + attribute schemas
│ ├── orbus_objects.py # 14 synthetic Orbus objects
│ ├── orbus_relationships.py # 14 relationships
│ ├── snow_schemas.py # CMDB class definitions
│ ├── snow_users.py # 6 sys_user records
│ ├── snow_cis.py # 11 CIs paired with Orbus objects
│ ├── snow_rel_ci.py # 8 cmdb_rel_ci entries (one asymmetry)
│ └── reconciliation_truth.py # ANSWER KEY: 10 expected findings
├── tools/
│ ├── orbus_tools.py # Pure Orbus query functions
│ ├── snow_tools.py # Pure ServiceNow query functions
│ └── cross_lookup.py # Bridge tool — Orbus <-> SN
├── server.py # Single FastMCP server with 16 prefixed tools
├── requirements.txt # mcp>=1.12.0
├── runtime.txt # python-3.11.0
└── README.md
Upgrade path to real data
When real Orbus / ServiceNow access is wired up, only the files in data/
need to change. Tool function signatures and the server.py decorators
stay identical so the consuming agent sees no difference.
- Orbus: replace
ORBUS_OBJECTS/ORBUS_RELATIONSHIPSwith httpx GETs againsthttps://rathbones-api.iserver365.com/odata/Objectsand/odata/Relationships(OAuth2 implicit flow). - ServiceNow: replace
SN_CIS/SN_REL_CI/SN_USERSwith calls tohttps://rathbones.service-now.com/api/now/table/cmdb_ci_business_app,cmdb_rel_ci,sys_user(basic auth via service account).
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。