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).
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.