Rathbones Reconciliation MCP PoC

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.

Category
Visit Server

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_RELATIONSHIPS with httpx GETs against https://rathbones-api.iserver365.com/odata/Objects and /odata/Relationships (OAuth2 implicit flow).
  • ServiceNow: replace SN_CIS / SN_REL_CI / SN_USERS with calls to https://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

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.

Official
Featured
TypeScript
Magic Component Platform (MCP)

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.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

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.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

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.

Official
Featured
TypeScript
Kagi MCP Server

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.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

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.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured