Rathbones Reconciliation MCP PoC
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Rathbones Reconciliation MCP PoCcompare MyRathbones Portal across Orbus and ServiceNow"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Rathbones Reconciliation MCP PoC — Orbus Infinity + ServiceNow CMDB Emulator
A single deployed service exposing two MCP endpoints that emulate Orbus Infinity and ServiceNow CMDB on top of the same synthetic dataset. Built specifically to support the Current State Architecture Reconciliation Agent intern project.
⚠️ Synthetic data only. Do not load real Rathbones data into this repository. All object IDs, names, owners and attributes are invented to illustrate reconciliation patterns.
Why two MCPs?
The reconciliation agent's job is to compare two sources of truth:
Source | Models | Strength | Weakness |
Orbus Infinity | Architectural lens — applications, components, relationships, capabilities, processes, HLD links | Best place for architectural relationships and design context | Naming and lifecycle data may drift |
ServiceNow CMDB | Operational lens — production CIs, owners, lifecycle, dependencies | Authoritative for "what is actually deployed" | Doesn't carry rich relationship modelling |
Treating each source as its own MCP server is intentional: it mirrors the production architecture (where each system would be its own Copilot Studio custom connector / MCP connection), and it lets the reconciliation agent reason about source-of-truth precedence per attribute.
Related MCP server: Constructoo MCP Server
Architecture
┌─────────────────────────────────────┐
│ Render.com (one service) │
│ │
Copilot Studio │ ┌──────────────────────────────┐ │
Reconciliation ──────►│ │ /orbus/mcp │───┼─┐
Agent │ │ Orbus Infinity emulator │ │ │
│ │ - list_object_types │ │ │
│ │ - list_objects │ │ │
│ │ - get_object │ │ │
│ │ - search_objects │ │ │
│ │ - get_relationships │ │ │
│ │ - get_attribute_schema │ │ │
│ │ - get_linked_documents │ │ │
│ │ - find_servicenow_match │ │ │
│ └──────────────────────────────┘ │ │
│ │ │
│ ┌──────────────────────────────┐ │ │
│ │ /servicenow/mcp │───┼─┤
│ │ ServiceNow CMDB emulator │ │ │
│ │ - list_classes │ │ │
│ │ - query_cis │ │ │
│ │ - get_ci │ │ │
│ │ - get_ci_relationships │ │ │
│ │ - get_user │ │ │
│ │ - search_business_apps │ │ │
│ │ - get_class_schema │ │ │
│ │ - find_orbus_match │ │ │
│ └──────────────────────────────┘ │ │
│ │ │
│ ┌──────────────────────────────┐ │ │
│ │ Shared synthetic dataset │◄──┘ │
│ │ (data/*.py) │ │
│ │ + reconciliation_truth.py │ │
│ └──────────────────────────────┘ │
└─────────────────────────────────────┘The reconciliation findings baked into the dataset
These are the 10 deliberate mismatches the agent should be able to surface.
See data/reconciliation_truth.py for the full answer key.
# | Finding | Type | Orbus | ServiceNow |
F1 | MyRathbones Portal — clean match |
|
|
|
F2 | ExBO vs Eximius Backoffice |
|
|
|
F3 | 3 Orbus components vs 1 SN business app |
|
|
|
F4 | CAMMS ERM approved, not yet in CMDB |
|
| — |
F5 | Snowflake EDP — owner conflict |
|
|
|
F6 | Citrix VDI — Live in Orbus, Retired in SN |
|
|
|
F7 | Proactis vs Proactis P2P — no ID link |
|
|
|
F8 | Power BI — two SN candidates |
|
|
|
F9 | ExBO→Snowflake feed missing in CMDB |
|
| — |
F10 | Legacy Citrix Reporting only in SN |
| — |
|
Quick start
1. Push to your GitHub repo
The repo should sit on a personal account (not a Rathbones-managed account).
git init
git add .
git commit -m "Initial dual-MCP reconciliation PoC"
git remote add origin https://github.com/<your-user>/<repo-name>.git
git push -u origin main2. Deploy on Render
New Web Service → connect the repo → Free plan.
Build command:
pip install -r requirements.txtStart command:
python main.pyRender assigns a
$PORTautomatically;main.pyreads it.
Once live you'll get a URL like https://<service>.onrender.com.
3. Wake the server (free tier sleeps after 15 min idle)
Open in a browser:
https://<service>.onrender.com/You'll see a JSON response listing the two endpoints — server is alive.
4. Connect to Copilot Studio
In Copilot Studio → your agent → Tools → Add a tool → New tool → Model Context Protocol. Add each endpoint as a separate MCP connection:
Name | Server URL | Auth |
|
| None |
|
| None |
The agent will see 16 tools total (8 per server) and can route calls to whichever source it needs.
Project structure
rathbones-reconciliation-mcp/
├── data/
│ ├── orbus_metamodel.py # 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
│ └── 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
├── servers/
│ ├── orbus_server.py # FastMCP wrapper for Orbus tools
│ └── snow_server.py # FastMCP wrapper for ServiceNow tools
├── main.py # Starlette app mounting both MCPs
├── requirements.txt
├── runtime.txt # python-3.11.0
└── README.mdUpgrade path to real data
When real OrbusInfinity and ServiceNow access is wired up, only the files
in data/ need to be replaced. The tool functions, MCP wrappers and
reconciliation agent never change.
Orbus: replace
ORBUS_OBJECTS/ORBUS_RELATIONSHIPSwith httpx GETs againsthttps://rathbones-api.iserver365.com/odata/Objectsand/odata/Relationships(OAuth2 implicit flow as per the OrbusInfinity HLD).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 a Rathbones service account).Tool signatures stay identical. Function bodies just swap their data source. The agent calling the MCP server can't tell the difference.
Local development
python -m venv .venv
.\.venv\Scripts\Activate.ps1 # Windows PowerShell
# source .venv/bin/activate # macOS / Linux
pip install -r requirements.txt
python main.pyThen in another shell:
curl http://localhost:8000/Returns the endpoint list. To talk MCP, point an MCP client at
http://localhost:8000/orbus/mcp or http://localhost:8000/servicenow/mcp.
Important notes
Synthetic data only. Do not load real Rathbones HLD, CMDB or owner data into any file in
data/.The MCP server is unauthenticated by design (synthetic data only). When the real-data version is built, authentication MUST be added before exposing it publicly.
Tenant DLP can block custom MCP server URLs in Copilot Studio. If the connection fails with "Couldn't load MCP tools", confirm with IT that Render.com URLs are allowed.
The reconciliation answer key in
data/reconciliation_truth.pyis for validating the reconciliation agent — it is not exposed via either MCP server.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
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/jjayaprarathbones/reconciliationTestMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server