@registrum/mcp 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,18 +1,41 @@
1
1
  # Registrum MCP Server
2
2
 
3
- **No Companies House API key needed.** One Registrum API key gives your AI agent enriched, cached UK company data — structured financials, director networks, and company profiles — directly inside Claude, Cursor, and any MCP-compatible client.
3
+ **UK company data in your AI agent — without building Companies House plumbing.**
4
4
 
5
- Unlike raw Companies House API wrappers that require you to register at the CH developer portal and manage your own rate limits, Registrum handles all of that for you: iXBRL filings parsed into clean JSON, 24h/7d caching, and circuit-breaker resilience on CH outages.
5
+ One API key. No Companies House developer account, no rate-limit handling, no
6
+ iXBRL parsing. Works in Claude Desktop, Claude Code, Cursor, and any
7
+ MCP-compatible client.
6
8
 
7
- **5 tools, zero boilerplate.** Search companies, pull structured financials, list directors, and map corporate networks.
9
+ ```bash
10
+ npx -y @registrum/mcp
11
+ ```
8
12
 
9
13
  ---
10
14
 
11
- ## Installation
15
+ ## Why this instead of the Companies House API directly
16
+
17
+ Companies House publishes the raw register for free, and you can absolutely
18
+ call it yourself. What you then own is the plumbing:
19
+
20
+ | Doing it yourself | With Registrum |
21
+ |---|---|
22
+ | Register for a CH developer key, manage OAuth | One `REGISTRUM_API_KEY` |
23
+ | 600 requests/5min, and you handle the 429s | Server-side throttling on a higher negotiated budget |
24
+ | Accounts arrive as iXBRL documents you must parse | `get_financials` returns turnover, net assets, profit/loss as numbers |
25
+ | PSC control types are raw codes | Decoded to plain English |
26
+ | Ownership chains: recurse yourself, handle cycles | `get_psc_chain` returns the resolved tree with termination reasons |
27
+ | Director networks: N+1 queries across appointments | `get_network` traverses to depth 2 |
28
+ | Retry, cache, and survive CH outages yourself | 24h/7d caching, circuit breaker, stale-while-revalidate |
29
+
30
+ Other Companies House MCP servers make you bring your own CH key and hand back
31
+ the raw response. This one does the enrichment.
32
+
33
+ ---
12
34
 
13
- ### Claude Desktop
35
+ ## Install
14
36
 
15
- Add to `~/.claude/claude_desktop_config.json`:
37
+ **Claude Desktop** — `~/.claude/claude_desktop_config.json`
38
+ **Cursor** — `.cursor/mcp.json` (per project) or `~/.cursor/mcp.json` (global)
16
39
 
17
40
  ```json
18
41
  {
@@ -20,62 +43,74 @@ Add to `~/.claude/claude_desktop_config.json`:
20
43
  "registrum": {
21
44
  "command": "npx",
22
45
  "args": ["-y", "@registrum/mcp"],
23
- "env": {
24
- "REGISTRUM_API_KEY": "reg_live_..."
25
- }
46
+ "env": { "REGISTRUM_API_KEY": "reg_live_..." }
26
47
  }
27
48
  }
28
49
  }
29
50
  ```
30
51
 
31
- Get a free API key at [registrum.co.uk](https://registrum.co.uk) (50 calls/month free).
32
-
33
- ### Cursor
34
-
35
- Add to `.cursor/mcp.json` in your project, or to `~/.cursor/mcp.json` globally — same format as above.
52
+ [Get a free key](https://registrum.co.uk/?utm_source=mcp&utm_campaign=readme) — 50 calls/month, no card.
36
53
 
37
54
  ---
38
55
 
39
56
  ## Tools
40
57
 
41
- | Tool | Description |
42
- |------|-------------|
43
- | `search_company` | Search for UK companies by name |
44
- | `get_company` | Enriched company profile (age, overdue flags, SIC descriptions) |
45
- | `get_financials` | Structured P&L + balance sheet from iXBRL filings |
46
- | `get_directors` | Directors with full appointment history across all companies |
47
- | `get_network` | Corporate network via shared director connections |
58
+ | Tool | What you get |
59
+ |---|---|
60
+ | `search_company` | Find a company by name → company number |
61
+ | `get_company` | Profile: status, age, SIC descriptions, overdue flags |
62
+ | `get_financials` | Turnover, net assets, profit/loss, employees — parsed from iXBRL, in GBP |
63
+ | `get_directors` | Current board with appointment history across all their companies |
64
+ | `get_psc` | Persons with Significant Control, control types in plain English |
65
+ | `get_psc_chain` | Ownership traversed to ultimate beneficial owners, with termination reasons |
66
+ | `get_compliance` | **ECCTA identity-verification status** — who has verified, who is pending, who is overdue |
67
+ | `get_network` | Companies connected by shared directors, to depth 2 |
68
+
69
+ ### On `get_compliance`
70
+
71
+ The Economic Crime and Corporate Transparency Act requires every UK director
72
+ and PSC to verify their identity with Companies House. **Enforcement begins
73
+ 18 November 2026**, after which unverified officers can block filings.
74
+
75
+ The tool returns verified / pending / overdue counts plus each unverified
76
+ person and their individual deadline. It deliberately distinguishes **pending**
77
+ (deadline not yet reached — not a failure) from **overdue** (missed). Treating
78
+ those as the same thing is the single easiest way to report a compliant company
79
+ as non-compliant.
48
80
 
49
81
  ---
50
82
 
51
83
  ## Example prompts
52
84
 
53
- > "Who are the directors of Tesco PLC and what other companies are they associated with?"
85
+ > "Is Tesco PLC compliant with ECCTA director verification, and who still needs to verify?"
54
86
 
55
- > "Get the latest financials for company 00445790"
87
+ > "Pull the last filed financials for 00445790 and tell me if turnover grew."
56
88
 
57
- > "Search for companies named 'Rolls-Royce' and show me their status"
89
+ > "Who ultimately owns Rolls-Royce Holdings? Trace the ownership chain."
58
90
 
59
- > "Map the director network for Barratt Developments to depth 2"
91
+ > "Which companies share directors with Barratt Developments?"
92
+
93
+ > "Search for 'Monzo' and show me status, incorporation date and directors."
60
94
 
61
95
  ---
62
96
 
63
97
  ## Plans
64
98
 
65
- | Plan | Price | Calls/month |
66
- |------|-------|------------|
67
- | Free | £0 | 50 |
68
- | Pro | £49/mo | 2,000 |
69
- | Enterprise | £149/mo | 10,000 |
99
+ Free tier is 50 calls/month with every core endpoint. Paid tiers add volume,
100
+ PSC chain traversal and the ECCTA compliance endpoint.
70
101
 
71
- [See pricing →](https://registrum.co.uk/#pricing)
102
+ Prices and quotas are served live from [`GET /v1/plans`](https://api.registrum.co.uk/v1/plans) —
103
+ that endpoint is the source of truth, so this README does not duplicate the
104
+ numbers and cannot go stale against them. Human-readable version at
105
+ [registrum.co.uk](https://registrum.co.uk/?utm_source=mcp&utm_campaign=readme#pricing).
72
106
 
73
107
  ---
74
108
 
75
- ## API reference
76
-
77
- Full API docs at [api.registrum.co.uk/docs](https://api.registrum.co.uk/docs)
109
+ ## Notes
78
110
 
79
- ## Support
111
+ - Company numbers are zero-padded 8-character strings: `00445790`, `SC000268`.
112
+ - Responses are JSON, cached server-side (24h profiles/directors, 7d financials).
113
+ - Every call sends `User-Agent: @registrum/mcp/<version>` so we can see which
114
+ features developers actually use. No telemetry runs on your machine.
80
115
 
81
- [support@registrum.co.uk](mailto:support@registrum.co.uk)
116
+ [API reference](https://api.registrum.co.uk/docs) · [Issues](https://github.com/vdmeu/registrum-mcp/issues) · [support@registrum.co.uk](mailto:support@registrum.co.uk)
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@ import { createServer } from "./server.js";
4
4
  const apiKey = process.env.REGISTRUM_API_KEY ?? "";
5
5
  if (!apiKey) {
6
6
  process.stderr.write("Warning: REGISTRUM_API_KEY is not set. Tool calls will fail until you set it.\n" +
7
- "Get a free key at https://registrum.co.uk\n");
7
+ "Get a free key at https://registrum.co.uk/?utm_source=mcp&utm_campaign=server\n");
8
8
  }
9
9
  const server = createServer(apiKey);
10
10
  const transport = new StdioServerTransport();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC;AACnD,IAAI,CAAC,MAAM,EAAE,CAAC;IACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,iFAAiF;QACjF,6CAA6C,CAC9C,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AACpC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC;AACnD,IAAI,CAAC,MAAM,EAAE,CAAC;IACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,iFAAiF;QACjF,iFAAiF,CAClF,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AACpC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,eAAO,MAAM,QAAQ,mCAAmC,CAAC;AAGzD,wBAAsB,OAAO,CAC3B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,MAAiB,GACzB,OAAO,CAAC,OAAO,CAAC,CAclB;AAeD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,MAAiB,GACzB,SAAS,CAmPX"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,eAAO,MAAM,QAAQ,mCAAmC,CAAC;AAEzD,wBAAsB,OAAO,CAC3B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,MAAiB,GACzB,OAAO,CAAC,OAAO,CAAC,CAclB;AAeD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,MAAiB,GACzB,SAAS,CAoRX"}
package/dist/server.js CHANGED
@@ -1,13 +1,13 @@
1
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import { z } from "zod";
3
+ import { VERSION, USER_AGENT } from "./version.js";
3
4
  export const API_BASE = "https://api.registrum.co.uk/v1";
4
- const VERSION = "1.0.0";
5
5
  export async function callApi(path, apiKey, baseUrl = API_BASE) {
6
6
  if (!apiKey) {
7
- throw new Error("REGISTRUM_API_KEY is not set. Get a free key at https://registrum.co.uk and set it in your MCP client config.");
7
+ throw new Error("REGISTRUM_API_KEY is not set. Get a free key at https://registrum.co.uk/?utm_source=mcp&utm_campaign=server and set it in your MCP client config.");
8
8
  }
9
9
  const res = await fetch(`${baseUrl}${path}`, {
10
- headers: { "X-API-Key": apiKey },
10
+ headers: { "X-API-Key": apiKey, "User-Agent": USER_AGENT },
11
11
  });
12
12
  if (!res.ok) {
13
13
  const body = await res.text();
@@ -33,8 +33,8 @@ export function createServer(apiKey, baseUrl = API_BASE) {
33
33
  instructions: "Use these tools to look up UK companies registered at Companies House. " +
34
34
  "Company numbers are zero-padded 8-digit strings (e.g. '00445790' for Tesco PLC). " +
35
35
  "When a user gives you a company name, use search_company first to find the number, " +
36
- "then use get_company, get_financials, get_directors, get_psc, get_psc_chain, or get_network as needed. " +
37
- "Use get_psc for a flat view of who controls a company. " +
36
+ "then use get_company, get_financials, get_directors, get_psc, get_psc_chain, get_compliance, or get_network as needed. " +
37
+ "Use get_psc for a flat view of who controls a company. Use get_compliance for ECCTA identity-verification status - note 'pending' means the deadline has not passed and is not a failure. " +
38
38
  "Use get_psc_chain to trace corporate ownership upward and find the ultimate beneficial owners (UBOs) " +
39
39
  "— it follows corporate entity PSCs recursively until reaching natural persons or foreign entities.",
40
40
  });
@@ -133,6 +133,34 @@ export function createServer(apiKey, baseUrl = API_BASE) {
133
133
  return err(String(e));
134
134
  }
135
135
  });
136
+ server.registerTool("get_compliance", {
137
+ title: "Check ECCTA identity-verification compliance",
138
+ description: "Check a UK company's ECCTA identity-verification status - who has verified their " +
139
+ "identity with Companies House, who is still pending, and who is overdue. " +
140
+ "The Economic Crime and Corporate Transparency Act requires every director and PSC to " +
141
+ "verify their identity; enforcement begins 18 November 2026, after which unverified " +
142
+ "officers can block filings. " +
143
+ "Returns per-company counts (directors_total, directors_verified, directors_pending, " +
144
+ "directors_overdue) and the same for PSCs, plus unverified_persons with each person's " +
145
+ "name, role, status and their individual deadline. " +
146
+ "IMPORTANT: 'pending' means the deadline has not yet passed - it is NOT a failure and " +
147
+ "must not be reported as one. Only 'overdue' means a deadline was missed. " +
148
+ "Requires a Pro plan or above. Cached for 24 hours.",
149
+ inputSchema: {
150
+ company_number: z
151
+ .string()
152
+ .regex(/^[A-Z0-9]{1,8}$/)
153
+ .describe("Companies House company number, e.g. '00445790' for Tesco PLC"),
154
+ },
155
+ }, async ({ company_number }) => {
156
+ try {
157
+ const data = await api(`/company/${company_number}/compliance`);
158
+ return text(data);
159
+ }
160
+ catch (e) {
161
+ return err(String(e));
162
+ }
163
+ });
136
164
  server.registerTool("get_psc", {
137
165
  title: "Get persons with significant control",
138
166
  description: "Get the PSC (Persons with Significant Control) register for a UK company. " +
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare const VERSION: string;
2
+ export declare const PACKAGE_NAME: string;
3
+ /** Sent on every API call so MCP-driven usage is distinguishable from direct
4
+ * API traffic. Without it, adoption of this package is invisible server-side. */
5
+ export declare const USER_AGENT: string;
6
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,OAAO,EAAE,MAAoB,CAAC;AAC3C,eAAO,MAAM,YAAY,EAAE,MAAiB,CAAC;AAE7C;iFACiF;AACjF,eAAO,MAAM,UAAU,QAA0D,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { createRequire } from "node:module";
2
+ /**
3
+ * Single source of truth for the version we report to MCP clients.
4
+ *
5
+ * This was previously a literal `const VERSION = "1.0.0"` in server.ts, which
6
+ * stayed frozen while the package shipped 1.1.0 and 1.2.x - so every client
7
+ * was told the wrong version for five months. Same drift class as server.json
8
+ * vs package.json; both are now pinned by tests.
9
+ */
10
+ const require = createRequire(import.meta.url);
11
+ const pkg = require("../package.json");
12
+ export const VERSION = pkg.version;
13
+ export const PACKAGE_NAME = pkg.name;
14
+ /** Sent on every API call so MCP-driven usage is distinguishable from direct
15
+ * API traffic. Without it, adoption of this package is invisible server-side. */
16
+ export const USER_AGENT = `${PACKAGE_NAME}/${VERSION} (+https://registrum.co.uk)`;
17
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C;;;;;;;GAOG;AACH,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAsC,CAAC;AAE5E,MAAM,CAAC,MAAM,OAAO,GAAW,GAAG,CAAC,OAAO,CAAC;AAC3C,MAAM,CAAC,MAAM,YAAY,GAAW,GAAG,CAAC,IAAI,CAAC;AAE7C;iFACiF;AACjF,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,YAAY,IAAI,OAAO,6BAA6B,CAAC"}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@registrum/mcp",
3
3
  "mcpName": "io.github.vdmeu/registrum-mcp",
4
- "version": "1.2.0",
5
- "description": "MCP server for the Registrum Companies House API — search UK companies, get financials, directors, beneficial ownership (PSC), and director networks",
4
+ "version": "1.2.2",
5
+ "description": "MCP server for the Registrum Companies House API — search UK companies, get financials, directors, beneficial ownership (PSC), and director networks",
6
6
  "keywords": [
7
7
  "mcp",
8
8
  "mcp-server",
@@ -18,7 +18,7 @@
18
18
  "homepage": "https://registrum.co.uk",
19
19
  "repository": {
20
20
  "type": "git",
21
- "url": "https://github.com/eugenemerwe/registrum-mcp"
21
+ "url": "git+https://github.com/vdmeu/registrum-mcp.git"
22
22
  },
23
23
  "license": "MIT",
24
24
  "author": "Eugene Merwe-Chartier",
@@ -50,5 +50,8 @@
50
50
  },
51
51
  "engines": {
52
52
  "node": ">=18"
53
+ },
54
+ "bugs": {
55
+ "url": "https://github.com/vdmeu/registrum-mcp/issues"
53
56
  }
54
57
  }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=server.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.test.d.ts","sourceRoot":"","sources":["../src/server.test.ts"],"names":[],"mappings":""}
@@ -1,268 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from "vitest";
2
- import { Client } from "@modelcontextprotocol/sdk/client/index.js";
3
- import { InMemoryTransport } from "@modelcontextprotocol/sdk/inMemory.js";
4
- import { callApi, createServer, API_BASE } from "./server.js";
5
- // ─── Helpers ─────────────────────────────────────────────────────────────────
6
- function mockFetch(status, body) {
7
- vi.spyOn(globalThis, "fetch").mockResolvedValueOnce({
8
- ok: status >= 200 && status < 300,
9
- status,
10
- json: () => Promise.resolve(body),
11
- text: () => Promise.resolve(JSON.stringify(body)),
12
- });
13
- }
14
- async function makeClient() {
15
- const server = createServer("reg_test_key", API_BASE);
16
- const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
17
- await server.connect(serverTransport);
18
- const client = new Client({ name: "test-client", version: "1.0.0" });
19
- await client.connect(clientTransport);
20
- return client;
21
- }
22
- // ─── callApi ─────────────────────────────────────────────────────────────────
23
- describe("callApi", () => {
24
- beforeEach(() => vi.restoreAllMocks());
25
- it("makes a GET request with X-API-Key header and returns parsed JSON", async () => {
26
- const spy = vi.spyOn(globalThis, "fetch").mockResolvedValueOnce({
27
- ok: true,
28
- json: () => Promise.resolve({ name: "Tesco PLC" }),
29
- });
30
- const result = await callApi("/company/00445790", "reg_test_key");
31
- expect(result).toEqual({ name: "Tesco PLC" });
32
- expect(spy).toHaveBeenCalledWith(`${API_BASE}/company/00445790`, expect.objectContaining({ headers: { "X-API-Key": "reg_test_key" } }));
33
- });
34
- it("throws an error with status code when response is not ok", async () => {
35
- vi.spyOn(globalThis, "fetch").mockResolvedValueOnce({
36
- ok: false,
37
- status: 401,
38
- text: () => Promise.resolve("Unauthorized"),
39
- });
40
- await expect(callApi("/company/00445790", "bad_key")).rejects.toThrow("API error 401: Unauthorized");
41
- });
42
- it("throws an error with 404 status for unknown company", async () => {
43
- vi.spyOn(globalThis, "fetch").mockResolvedValueOnce({
44
- ok: false,
45
- status: 404,
46
- text: () => Promise.resolve("Not Found"),
47
- });
48
- await expect(callApi("/company/99999999", "reg_test_key")).rejects.toThrow("API error 404");
49
- });
50
- });
51
- // ─── search_company ───────────────────────────────────────────────────────────
52
- describe("search_company tool", () => {
53
- beforeEach(() => vi.restoreAllMocks());
54
- it("returns company list from the API", async () => {
55
- const payload = { results: [{ company_number: "00445790", name: "Tesco PLC" }] };
56
- mockFetch(200, payload);
57
- const client = await makeClient();
58
- const result = await client.callTool({ name: "search_company", arguments: { query: "Tesco" } });
59
- expect(result.isError).toBeFalsy();
60
- const text = result.content[0].text;
61
- expect(JSON.parse(text)).toEqual(payload);
62
- });
63
- it("includes limit param in the URL when provided", async () => {
64
- const spy = vi.spyOn(globalThis, "fetch").mockResolvedValueOnce({
65
- ok: true,
66
- json: () => Promise.resolve({ results: [] }),
67
- });
68
- const client = await makeClient();
69
- await client.callTool({ name: "search_company", arguments: { query: "Tesco", limit: 5 } });
70
- const url = spy.mock.calls[0][0];
71
- expect(url).toContain("q=Tesco");
72
- expect(url).toContain("limit=5");
73
- });
74
- it("returns isError on API failure", async () => {
75
- vi.spyOn(globalThis, "fetch").mockResolvedValueOnce({
76
- ok: false,
77
- status: 429,
78
- text: () => Promise.resolve("Too Many Requests"),
79
- });
80
- const client = await makeClient();
81
- const result = await client.callTool({ name: "search_company", arguments: { query: "Tesco" } });
82
- expect(result.isError).toBe(true);
83
- const text = result.content[0].text;
84
- expect(text).toContain("429");
85
- });
86
- });
87
- // ─── get_company ──────────────────────────────────────────────────────────────
88
- describe("get_company tool", () => {
89
- beforeEach(() => vi.restoreAllMocks());
90
- it("fetches /company/{number} and returns the profile", async () => {
91
- const payload = { company_number: "00445790", name: "Tesco PLC" };
92
- const spy = vi.spyOn(globalThis, "fetch").mockResolvedValueOnce({
93
- ok: true,
94
- json: () => Promise.resolve(payload),
95
- });
96
- const client = await makeClient();
97
- const result = await client.callTool({
98
- name: "get_company",
99
- arguments: { company_number: "00445790" },
100
- });
101
- expect(result.isError).toBeFalsy();
102
- const url = spy.mock.calls[0][0];
103
- expect(url).toBe(`${API_BASE}/company/00445790`);
104
- const text = result.content[0].text;
105
- expect(JSON.parse(text)).toEqual(payload);
106
- });
107
- it("returns isError on 404", async () => {
108
- vi.spyOn(globalThis, "fetch").mockResolvedValueOnce({
109
- ok: false,
110
- status: 404,
111
- text: () => Promise.resolve("Not found"),
112
- });
113
- const client = await makeClient();
114
- const result = await client.callTool({
115
- name: "get_company",
116
- arguments: { company_number: "99999999" },
117
- });
118
- expect(result.isError).toBe(true);
119
- });
120
- });
121
- // ─── get_financials ───────────────────────────────────────────────────────────
122
- describe("get_financials tool", () => {
123
- beforeEach(() => vi.restoreAllMocks());
124
- it("fetches /company/{number}/financials", async () => {
125
- const payload = { revenue: 65000000 };
126
- const spy = vi.spyOn(globalThis, "fetch").mockResolvedValueOnce({
127
- ok: true,
128
- json: () => Promise.resolve(payload),
129
- });
130
- const client = await makeClient();
131
- await client.callTool({
132
- name: "get_financials",
133
- arguments: { company_number: "00445790" },
134
- });
135
- const url = spy.mock.calls[0][0];
136
- expect(url).toBe(`${API_BASE}/company/00445790/financials`);
137
- });
138
- });
139
- // ─── get_directors ────────────────────────────────────────────────────────────
140
- describe("get_directors tool", () => {
141
- beforeEach(() => vi.restoreAllMocks());
142
- it("fetches /company/{number}/directors", async () => {
143
- const payload = { directors: [] };
144
- const spy = vi.spyOn(globalThis, "fetch").mockResolvedValueOnce({
145
- ok: true,
146
- json: () => Promise.resolve(payload),
147
- });
148
- const client = await makeClient();
149
- await client.callTool({
150
- name: "get_directors",
151
- arguments: { company_number: "00445790" },
152
- });
153
- const url = spy.mock.calls[0][0];
154
- expect(url).toBe(`${API_BASE}/company/00445790/directors`);
155
- });
156
- });
157
- // ─── get_psc ─────────────────────────────────────────────────────────────────
158
- describe("get_psc tool", () => {
159
- beforeEach(() => vi.restoreAllMocks());
160
- it("fetches /company/{number}/psc", async () => {
161
- const payload = { active_pscs: [], ceased_pscs: [], has_psc_exemption: false };
162
- const spy = vi.spyOn(globalThis, "fetch").mockResolvedValueOnce({
163
- ok: true,
164
- json: () => Promise.resolve(payload),
165
- });
166
- const client = await makeClient();
167
- const result = await client.callTool({
168
- name: "get_psc",
169
- arguments: { company_number: "00445790" },
170
- });
171
- expect(result.isError).toBeFalsy();
172
- const url = spy.mock.calls[0][0];
173
- expect(url).toBe(`${API_BASE}/company/00445790/psc`);
174
- const text = result.content[0].text;
175
- expect(JSON.parse(text)).toEqual(payload);
176
- });
177
- it("returns isError on API failure", async () => {
178
- vi.spyOn(globalThis, "fetch").mockResolvedValueOnce({
179
- ok: false,
180
- status: 404,
181
- text: () => Promise.resolve("Not found"),
182
- });
183
- const client = await makeClient();
184
- const result = await client.callTool({
185
- name: "get_psc",
186
- arguments: { company_number: "99999999" },
187
- });
188
- expect(result.isError).toBe(true);
189
- });
190
- });
191
- // ─── get_psc_chain ────────────────────────────────────────────────────────────
192
- describe("get_psc_chain tool", () => {
193
- beforeEach(() => vi.restoreAllMocks());
194
- it("fetches /company/{number}/psc/chain without max_depth by default", async () => {
195
- const payload = { company_number: "12345678", pscs: [], chain_metadata: { companies_resolved: 1 } };
196
- const spy = vi.spyOn(globalThis, "fetch").mockResolvedValueOnce({
197
- ok: true,
198
- json: () => Promise.resolve(payload),
199
- });
200
- const client = await makeClient();
201
- const result = await client.callTool({
202
- name: "get_psc_chain",
203
- arguments: { company_number: "12345678" },
204
- });
205
- expect(result.isError).toBeFalsy();
206
- const url = spy.mock.calls[0][0];
207
- expect(url).toBe(`${API_BASE}/company/12345678/psc/chain`);
208
- const text = result.content[0].text;
209
- expect(JSON.parse(text)).toEqual(payload);
210
- });
211
- it("appends ?max_depth=3 when max_depth is provided", async () => {
212
- const spy = vi.spyOn(globalThis, "fetch").mockResolvedValueOnce({
213
- ok: true,
214
- json: () => Promise.resolve({ pscs: [] }),
215
- });
216
- const client = await makeClient();
217
- await client.callTool({
218
- name: "get_psc_chain",
219
- arguments: { company_number: "12345678", max_depth: 3 },
220
- });
221
- const url = spy.mock.calls[0][0];
222
- expect(url).toBe(`${API_BASE}/company/12345678/psc/chain?max_depth=3`);
223
- });
224
- it("returns isError on API failure", async () => {
225
- vi.spyOn(globalThis, "fetch").mockResolvedValueOnce({
226
- ok: false,
227
- status: 404,
228
- text: () => Promise.resolve("Not found"),
229
- });
230
- const client = await makeClient();
231
- const result = await client.callTool({
232
- name: "get_psc_chain",
233
- arguments: { company_number: "99999999" },
234
- });
235
- expect(result.isError).toBe(true);
236
- });
237
- });
238
- // ─── get_network ──────────────────────────────────────────────────────────────
239
- describe("get_network tool", () => {
240
- beforeEach(() => vi.restoreAllMocks());
241
- it("fetches /company/{number}/network without depth param by default", async () => {
242
- const spy = vi.spyOn(globalThis, "fetch").mockResolvedValueOnce({
243
- ok: true,
244
- json: () => Promise.resolve({ nodes: [] }),
245
- });
246
- const client = await makeClient();
247
- await client.callTool({
248
- name: "get_network",
249
- arguments: { company_number: "00445790" },
250
- });
251
- const url = spy.mock.calls[0][0];
252
- expect(url).toBe(`${API_BASE}/company/00445790/network`);
253
- });
254
- it("appends ?depth=2 when depth is provided", async () => {
255
- const spy = vi.spyOn(globalThis, "fetch").mockResolvedValueOnce({
256
- ok: true,
257
- json: () => Promise.resolve({ nodes: [] }),
258
- });
259
- const client = await makeClient();
260
- await client.callTool({
261
- name: "get_network",
262
- arguments: { company_number: "00445790", depth: 2 },
263
- });
264
- const url = spy.mock.calls[0][0];
265
- expect(url).toBe(`${API_BASE}/company/00445790/network?depth=2`);
266
- });
267
- });
268
- //# sourceMappingURL=server.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.test.js","sourceRoot":"","sources":["../src/server.test.ts"],"names":[],"mappings":"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"}