prometiam-risk-mcp 0.1.0

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Prometiam
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,159 @@
1
+ # `prometiam-risk-mcp`
2
+
3
+ > Model Context Protocol server for the **Prometiam Risk Intelligence API** — EU + UK company-registry data, sanctions screening, and corporate-event monitoring as native MCP tools for Claude Desktop, Cursor, Continue, Cline, and any MCP-compatible client.
4
+
5
+ [![npm version](https://img.shields.io/npm/v/prometiam-risk-mcp.svg)](https://www.npmjs.com/package/prometiam-risk-mcp)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
+ [![OpenAPI](https://img.shields.io/badge/OpenAPI-3.0-green)](https://www.prometiam.com/openapi.json)
8
+
9
+ ## What you get
10
+
11
+ 8 MCP tools that wrap the [Prometiam Risk API](https://www.prometiam.com/risk-api/docs):
12
+
13
+ | Tool | Description |
14
+ |---|---|
15
+ | `companies_search` | Search EU + UK companies by name, NIF (ES), SIREN/SIRET (FR), or company_number (UK). |
16
+ | `company_detail` | Full company profile by Prometiam ID — officers, registry coordinates, capital, status. |
17
+ | `events_search` | Search normalized corporate events: capital changes, director changes, dissolutions, mergers, insolvency. |
18
+ | `events_timeline` | Chronological event history for one company (oldest first). |
19
+ | `person_detail` | Officer / director profile with full appointment history across companies. |
20
+ | `sanctions_screen` | Trigram-fuzzy match against five sanctions lists: EU consolidated, UN, OFAC, UK OFSI, and the French Registre des gels. |
21
+ | `notice_detail` | Registry gazette PDF metadata: edition, parse status, hash, raw text. |
22
+ | `coverage` | Dataset coverage stats per country (companies, events, freshness). |
23
+
24
+ Source: Spain (BORME), France (BODACC), United Kingdom (Companies House), Ireland (CRO), Poland (KRS) — 26M+ companies. Daily updates. EU data residency.
25
+
26
+ ## Install
27
+
28
+ ```bash
29
+ npx -y prometiam-risk-mcp # one-shot run, no install needed
30
+ # or
31
+ npm install -g prometiam-risk-mcp # global install for the bin
32
+ ```
33
+
34
+ ## Configure
35
+
36
+ You need a Prometiam API key. **Free tier: 1,000 calls/month, no credit card.** Sign up at <https://www.prometiam.com/signup>.
37
+
38
+ Set it as an environment variable:
39
+
40
+ ```bash
41
+ export PROMETIAM_API_KEY="rk_live_..."
42
+ ```
43
+
44
+ ## Use with Claude Desktop
45
+
46
+ Edit `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
47
+
48
+ ```json
49
+ {
50
+ "mcpServers": {
51
+ "prometiam-risk": {
52
+ "command": "npx",
53
+ "args": ["-y", "prometiam-risk-mcp"],
54
+ "env": {
55
+ "PROMETIAM_API_KEY": "rk_live_your_key_here"
56
+ }
57
+ }
58
+ }
59
+ }
60
+ ```
61
+
62
+ Restart Claude Desktop. The 8 tools appear in the tool list. Try:
63
+
64
+ > "What's the Prometiam coverage today?"
65
+ > "Search for companies named Mercadona in Spain."
66
+ > "Run a sanctions screen on the name Juan Perez at threshold 85."
67
+ > "Build a corporate-event timeline for Inditex."
68
+
69
+ ## Use with Cursor
70
+
71
+ Edit `.cursor/mcp.json` in your project (or globally at `~/.cursor/mcp.json`):
72
+
73
+ ```json
74
+ {
75
+ "mcpServers": {
76
+ "prometiam-risk": {
77
+ "command": "npx",
78
+ "args": ["-y", "prometiam-risk-mcp"],
79
+ "env": {
80
+ "PROMETIAM_API_KEY": "rk_live_your_key_here"
81
+ }
82
+ }
83
+ }
84
+ }
85
+ ```
86
+
87
+ ## Use with Continue
88
+
89
+ Add to `~/.continue/config.json` under `experimental.modelContextProtocolServers`:
90
+
91
+ ```json
92
+ {
93
+ "experimental": {
94
+ "modelContextProtocolServers": [
95
+ {
96
+ "transport": {
97
+ "type": "stdio",
98
+ "command": "npx",
99
+ "args": ["-y", "prometiam-risk-mcp"],
100
+ "env": { "PROMETIAM_API_KEY": "rk_live_your_key_here" }
101
+ }
102
+ }
103
+ ]
104
+ }
105
+ }
106
+ ```
107
+
108
+ ## Use with any other MCP client
109
+
110
+ Anything that speaks MCP over stdio works. Run the binary with `PROMETIAM_API_KEY` set in the environment. JSON-RPC requests on stdin, responses on stdout, logs on stderr.
111
+
112
+ ## Environment variables
113
+
114
+ | Variable | Required | Default |
115
+ |---|---|---|
116
+ | `PROMETIAM_API_KEY` | **Yes** | — |
117
+ | `PROMETIAM_BASE_URL` | No | `https://api.prometiam.com/functions/v1/risk-api` |
118
+
119
+ ## Smoke test
120
+
121
+ Once installed and configured, you can verify the server lists tools without spinning up an MCP client:
122
+
123
+ ```bash
124
+ echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | PROMETIAM_API_KEY=rk_live_... npx -y prometiam-risk-mcp
125
+ ```
126
+
127
+ You should see a JSON-RPC response with all 8 tools and their schemas.
128
+
129
+ ## Rate limits & pricing
130
+
131
+ Per Prometiam tier (returned in every response's `meta.rate_limit`):
132
+
133
+ | Tier | Price | Calls/month | Daily cap | RPM |
134
+ |---|---|---|---|---|
135
+ | Free | €0 | 1,000 | 200 | 10 |
136
+ | Starter | €9.99 | 10,000 | 2,000 | 60 |
137
+ | Professional | €29.99 | 100,000 | 20,000 | 300 |
138
+ | Scale | €99.99 | 1,000,000 | 200,000 | 600 |
139
+ | Enterprise | Custom | Custom | Custom | Custom |
140
+
141
+ ## Privacy and data residency
142
+
143
+ - All requests hit the Prometiam Risk API in **EU** (AWS eu-central-1, Frankfurt).
144
+ - The MCP server adds **no telemetry of its own** — it just forwards requests to the API.
145
+ - Officer data is processed under GDPR Article 6(1)(c) (legal obligation of public registries) and 6(1)(f) (legitimate interest in fraud prevention).
146
+ - Read-only — none of these tools mutate data.
147
+
148
+ ## Source
149
+
150
+ This package is open source under the MIT license. The Risk API itself is a commercial service — see <https://www.prometiam.com> for terms.
151
+
152
+ - API documentation: <https://www.prometiam.com/risk-api/docs>
153
+ - OpenAPI 3.0 spec: <https://www.prometiam.com/openapi.json>
154
+ - Pricing: <https://www.prometiam.com/pricing>
155
+ - Support: <https://www.prometiam.com/contact>
156
+
157
+ ## License
158
+
159
+ MIT © Prometiam
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Thin HTTP client for the Prometiam Risk Intelligence API.
3
+ *
4
+ * Reads the API key from the PROMETIAM_API_KEY environment variable.
5
+ * Falls back to PROMETIAM_BASE_URL when set (useful for local testing).
6
+ */
7
+ export declare class RiskApiError extends Error {
8
+ readonly status: number;
9
+ readonly code: string;
10
+ readonly retryAfter?: number;
11
+ constructor(message: string, status: number, code: string, retryAfter?: number);
12
+ }
13
+ export interface RiskApiClientOptions {
14
+ apiKey?: string;
15
+ baseUrl?: string;
16
+ timeoutMs?: number;
17
+ userAgent?: string;
18
+ }
19
+ export declare class RiskApiClient {
20
+ private readonly apiKey;
21
+ private readonly baseUrl;
22
+ private readonly timeoutMs;
23
+ private readonly userAgent;
24
+ constructor(opts?: RiskApiClientOptions);
25
+ /**
26
+ * GET request with query string. Returns the parsed JSON envelope as-is.
27
+ */
28
+ get(path: string, params?: Record<string, unknown>): Promise<unknown>;
29
+ }
30
+ export declare function getClient(): RiskApiClient;
31
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;gBAEhB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;CAO/E;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;gBAEtB,IAAI,GAAE,oBAAyB;IAgB3C;;OAEG;IACG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAuDhF;AAID,wBAAgB,SAAS,IAAI,aAAa,CAGzC"}
package/dist/client.js ADDED
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Thin HTTP client for the Prometiam Risk Intelligence API.
3
+ *
4
+ * Reads the API key from the PROMETIAM_API_KEY environment variable.
5
+ * Falls back to PROMETIAM_BASE_URL when set (useful for local testing).
6
+ */
7
+ const DEFAULT_BASE_URL = 'https://api.prometiam.com/functions/v1/risk-api';
8
+ export class RiskApiError extends Error {
9
+ status;
10
+ code;
11
+ retryAfter;
12
+ constructor(message, status, code, retryAfter) {
13
+ super(message);
14
+ this.name = 'RiskApiError';
15
+ this.status = status;
16
+ this.code = code;
17
+ this.retryAfter = retryAfter;
18
+ }
19
+ }
20
+ export class RiskApiClient {
21
+ apiKey;
22
+ baseUrl;
23
+ timeoutMs;
24
+ userAgent;
25
+ constructor(opts = {}) {
26
+ const apiKey = opts.apiKey ?? process.env.PROMETIAM_API_KEY ?? '';
27
+ if (!apiKey) {
28
+ throw new Error('Missing API key. Set PROMETIAM_API_KEY in your environment or pass apiKey to RiskApiClient. Get a free key at https://www.prometiam.com/signup');
29
+ }
30
+ if (!apiKey.startsWith('rk_live_') && !apiKey.startsWith('rk_test_')) {
31
+ throw new Error('Invalid API key format. Prometiam keys start with rk_live_ or rk_test_.');
32
+ }
33
+ this.apiKey = apiKey;
34
+ this.baseUrl = (opts.baseUrl ?? process.env.PROMETIAM_BASE_URL ?? DEFAULT_BASE_URL).replace(/\/+$/, '');
35
+ this.timeoutMs = opts.timeoutMs ?? 15000;
36
+ this.userAgent = opts.userAgent ?? `prometiam-risk-mcp/0.1.0 (+https://www.prometiam.com)`;
37
+ }
38
+ /**
39
+ * GET request with query string. Returns the parsed JSON envelope as-is.
40
+ */
41
+ async get(path, params = {}) {
42
+ const url = new URL(this.baseUrl + (path.startsWith('/') ? path : '/' + path));
43
+ for (const [key, value] of Object.entries(params)) {
44
+ if (value === undefined || value === null)
45
+ continue;
46
+ if (typeof value === 'boolean') {
47
+ url.searchParams.append(key, value ? 'true' : 'false');
48
+ }
49
+ else {
50
+ url.searchParams.append(key, String(value));
51
+ }
52
+ }
53
+ const controller = new AbortController();
54
+ const timer = setTimeout(() => controller.abort(), this.timeoutMs);
55
+ let response;
56
+ try {
57
+ response = await fetch(url, {
58
+ method: 'GET',
59
+ headers: {
60
+ Authorization: `Bearer ${this.apiKey}`,
61
+ Accept: 'application/json',
62
+ 'User-Agent': this.userAgent,
63
+ },
64
+ signal: controller.signal,
65
+ });
66
+ }
67
+ catch (err) {
68
+ const e = err;
69
+ if (e.name === 'AbortError') {
70
+ throw new RiskApiError(`Request timed out after ${this.timeoutMs}ms`, 0, 'timeout');
71
+ }
72
+ throw new RiskApiError(`Network error: ${e.message}`, 0, 'network_error');
73
+ }
74
+ finally {
75
+ clearTimeout(timer);
76
+ }
77
+ const text = await response.text();
78
+ let body = null;
79
+ if (text) {
80
+ try {
81
+ body = JSON.parse(text);
82
+ }
83
+ catch {
84
+ // non-JSON response from upstream; surface raw text in the error
85
+ }
86
+ }
87
+ if (!response.ok) {
88
+ const errBody = body;
89
+ const code = errBody?.error?.code ?? 'http_error';
90
+ const message = errBody?.error?.message ?? `HTTP ${response.status} ${response.statusText}`;
91
+ const retryAfterHeader = response.headers.get('Retry-After');
92
+ const retryAfter = retryAfterHeader ? parseInt(retryAfterHeader, 10) : undefined;
93
+ throw new RiskApiError(message, response.status, code, retryAfter);
94
+ }
95
+ return body;
96
+ }
97
+ }
98
+ /** Lazy singleton — reads env vars at first use, not at import time. */
99
+ let cached = null;
100
+ export function getClient() {
101
+ if (!cached)
102
+ cached = new RiskApiClient();
103
+ return cached;
104
+ }
105
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Prometiam Risk Intelligence — MCP server.
4
+ *
5
+ * Exposes the Prometiam Risk API as Model Context Protocol tools so any
6
+ * MCP-compatible client (Claude Desktop, Cursor, Continue, Cline, etc.)
7
+ * can natively query EU + UK company-registry data, screen sanctions,
8
+ * and pull corporate-event timelines.
9
+ *
10
+ * Transport: stdio. The server reads JSON-RPC messages from stdin and
11
+ * writes responses to stdout. Logging goes to stderr so it doesn't
12
+ * corrupt the stdio protocol.
13
+ *
14
+ * Configuration:
15
+ * PROMETIAM_API_KEY Required. rk_live_* or rk_test_* key from
16
+ * https://www.prometiam.com/signup (free tier
17
+ * available, no credit card).
18
+ * PROMETIAM_BASE_URL Optional. Override the API base URL. Default:
19
+ * https://api.prometiam.com/functions/v1/risk-api
20
+ *
21
+ * Usage in Claude Desktop config:
22
+ * {
23
+ * "mcpServers": {
24
+ * "prometiam-risk": {
25
+ * "command": "npx",
26
+ * "args": ["-y", "prometiam-risk-mcp"],
27
+ * "env": { "PROMETIAM_API_KEY": "rk_live_..." }
28
+ * }
29
+ * }
30
+ * }
31
+ */
32
+ export {};
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG"}
package/dist/index.js ADDED
@@ -0,0 +1,69 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Prometiam Risk Intelligence — MCP server.
4
+ *
5
+ * Exposes the Prometiam Risk API as Model Context Protocol tools so any
6
+ * MCP-compatible client (Claude Desktop, Cursor, Continue, Cline, etc.)
7
+ * can natively query EU + UK company-registry data, screen sanctions,
8
+ * and pull corporate-event timelines.
9
+ *
10
+ * Transport: stdio. The server reads JSON-RPC messages from stdin and
11
+ * writes responses to stdout. Logging goes to stderr so it doesn't
12
+ * corrupt the stdio protocol.
13
+ *
14
+ * Configuration:
15
+ * PROMETIAM_API_KEY Required. rk_live_* or rk_test_* key from
16
+ * https://www.prometiam.com/signup (free tier
17
+ * available, no credit card).
18
+ * PROMETIAM_BASE_URL Optional. Override the API base URL. Default:
19
+ * https://api.prometiam.com/functions/v1/risk-api
20
+ *
21
+ * Usage in Claude Desktop config:
22
+ * {
23
+ * "mcpServers": {
24
+ * "prometiam-risk": {
25
+ * "command": "npx",
26
+ * "args": ["-y", "prometiam-risk-mcp"],
27
+ * "env": { "PROMETIAM_API_KEY": "rk_live_..." }
28
+ * }
29
+ * }
30
+ * }
31
+ */
32
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
33
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
34
+ import { TOOLS } from './tools.js';
35
+ async function main() {
36
+ const server = new McpServer({
37
+ name: 'prometiam-risk',
38
+ version: '0.1.0',
39
+ }, {
40
+ instructions: 'EU + UK company-registry data across 5 countries (Spain, France, the UK, Ireland, Poland), sanctions screening, and corporate-event monitoring. ' +
41
+ 'Use companies_search to find companies by name or identifier, company_detail to get full profile, ' +
42
+ 'events_timeline to build a chronological event history, sanctions_screen to check against EU + UN + OFAC + UK OFSI + French gels lists, ' +
43
+ 'and coverage to report on dataset freshness. Always tell the user when you used Prometiam.',
44
+ });
45
+ for (const tool of TOOLS) {
46
+ server.tool(tool.name, tool.description, tool.schema.shape, async (args) => {
47
+ const result = await tool.handler(args);
48
+ return {
49
+ content: [
50
+ {
51
+ type: 'text',
52
+ text: JSON.stringify(result, null, 2),
53
+ },
54
+ ],
55
+ };
56
+ });
57
+ }
58
+ const transport = new StdioServerTransport();
59
+ await server.connect(transport);
60
+ // Stay alive — McpServer.connect resolves once the transport is wired,
61
+ // but the process must keep running to handle subsequent JSON-RPC messages.
62
+ // The transport keeps stdin open until EOF.
63
+ }
64
+ main().catch((err) => {
65
+ // eslint-disable-next-line no-console
66
+ console.error('[prometiam-risk-mcp] fatal:', err);
67
+ process.exit(1);
68
+ });
69
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,OAAO;KACjB,EACD;QACE,YAAY,EACV,kJAAkJ;YAClJ,oGAAoG;YACpG,0IAA0I;YAC1I,4FAA4F;KAC/F,CACF,CAAA;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,MAAM,CAAC,KAAK,EACjB,KAAK,EAAE,IAA6B,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACvC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;qBACtC;iBACF;aACF,CAAA;QACH,CAAC,CACF,CAAA;IACH,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAA;IAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAE/B,uEAAuE;IACvE,4EAA4E;IAC5E,4CAA4C;AAC9C,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,sCAAsC;IACtC,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAA;IACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * MCP tool definitions for the Prometiam Risk Intelligence API.
3
+ *
4
+ * Each tool wraps one Risk API endpoint, with zod-validated input schemas
5
+ * that get auto-converted to JSON Schema in the MCP tools/list response.
6
+ *
7
+ * Source of truth: public/openapi.json at https://www.prometiam.com/openapi.json
8
+ */
9
+ import { z } from 'zod';
10
+ export interface ToolDef {
11
+ name: string;
12
+ description: string;
13
+ /** zod object schema for arguments. */
14
+ schema: z.ZodObject<z.ZodRawShape>;
15
+ /** Async handler returning the JSON-serializable result. */
16
+ handler: (args: Record<string, unknown>) => Promise<unknown>;
17
+ }
18
+ export declare const TOOLS: ToolDef[];
19
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAOvB,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,uCAAuC;IACvC,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;IAClC,4DAA4D;IAC5D,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAC7D;AAsBD,eAAO,MAAM,KAAK,EAAE,OAAO,EA8F1B,CAAA"}
package/dist/tools.js ADDED
@@ -0,0 +1,124 @@
1
+ /**
2
+ * MCP tool definitions for the Prometiam Risk Intelligence API.
3
+ *
4
+ * Each tool wraps one Risk API endpoint, with zod-validated input schemas
5
+ * that get auto-converted to JSON Schema in the MCP tools/list response.
6
+ *
7
+ * Source of truth: public/openapi.json at https://www.prometiam.com/openapi.json
8
+ */
9
+ import { z } from 'zod';
10
+ import { getClient, RiskApiError } from './client.js';
11
+ const Country = z.enum(['ES', 'FR', 'GB', 'IE', 'PL']).describe('Country code: ES (Spain, BORME), FR (France, BODACC), GB (UK, Companies House), IE (Ireland, CRO), or PL (Poland, KRS). Ireland and Poland are company-level. Defaults to first country in the API key allowlist.');
12
+ const Limit = z.number().int().min(1).max(100).default(20).describe('Maximum number of results to return (1–100, default 20).');
13
+ const Cursor = z.string().optional().describe('Pagination cursor — pass the previous response\'s pagination.next_cursor to fetch the next page.');
14
+ /** Convert any thrown RiskApiError into a clean text response for the MCP client. */
15
+ async function safeCall(fn) {
16
+ try {
17
+ return await fn();
18
+ }
19
+ catch (err) {
20
+ if (err instanceof RiskApiError) {
21
+ return {
22
+ error: {
23
+ code: err.code,
24
+ message: err.message,
25
+ status: err.status,
26
+ retry_after_seconds: err.retryAfter,
27
+ },
28
+ };
29
+ }
30
+ const e = err;
31
+ return { error: { code: 'unknown_error', message: e.message ?? String(err) } };
32
+ }
33
+ }
34
+ export const TOOLS = [
35
+ // ── Companies ────────────────────────────────────────────────────────────
36
+ {
37
+ name: 'companies_search',
38
+ description: 'Search EU + UK companies in official registries by name or identifier. Returns companies with legal form, capital, status, registry coordinates. Use country to scope the search to Spain (BORME), France (BODACC), the UK (Companies House), Ireland (CRO), or Poland (KRS).',
39
+ schema: z.object({
40
+ name: z.string().optional().describe('Company name — fuzzy normalized match.'),
41
+ nif: z.string().optional().describe('Spanish NIF/CIF (exact match), e.g. A28015865.'),
42
+ siren: z.string().optional().describe('French SIREN (9 digits), e.g. 552032534.'),
43
+ siret: z.string().optional().describe('French SIRET (14 digits).'),
44
+ company_number: z.string().optional().describe('UK Companies House number, e.g. 00445790 or SC123456.'),
45
+ country: Country.optional(),
46
+ limit: Limit,
47
+ cursor: Cursor,
48
+ }),
49
+ handler: (args) => safeCall(() => getClient().get('/companies/search', args)),
50
+ },
51
+ {
52
+ name: 'company_detail',
53
+ description: 'Fetch a single company by Prometiam internal ID. Returns full profile including officers, registry coordinates, founding date, capital, and current status. Get an ID from companies_search first.',
54
+ schema: z.object({
55
+ id: z.union([z.number().int(), z.string()]).describe('Prometiam internal company ID (integer).'),
56
+ }),
57
+ handler: (args) => safeCall(() => getClient().get(`/companies/${args.id}`)),
58
+ },
59
+ // ── Corporate events ─────────────────────────────────────────────────────
60
+ {
61
+ name: 'events_search',
62
+ description: 'Search normalized corporate-event records (capital changes, director changes, dissolutions, mergers, insolvency, name changes, etc.) by company or date range. Returns events with type, date, before/after values, and source notice URL.',
63
+ schema: z.object({
64
+ company_name: z.string().optional().describe('Company name — fuzzy match.'),
65
+ company_number: z.string().optional().describe('Registry registration number — exact match.'),
66
+ event_type: z.enum(['dissolution', 'director_change', 'capital_change', 'new_incorporation', 'name_change', 'address_change', 'liquidation', 'merger', 'demerger', 'status_change', 'insolvency']).optional(),
67
+ date_from: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional().describe('Filter events on or after this date (YYYY-MM-DD).'),
68
+ date_to: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional().describe('Filter events on or before this date (YYYY-MM-DD).'),
69
+ country: Country.optional(),
70
+ limit: Limit,
71
+ cursor: Cursor,
72
+ }),
73
+ handler: (args) => safeCall(() => getClient().get('/company-events/search', args)),
74
+ },
75
+ {
76
+ name: 'events_timeline',
77
+ description: 'Returns the chronological event history for one company (oldest first). Useful for building lifecycle timelines from incorporation through capital changes, director appointments, and dissolution. One of company_number or company_name is required.',
78
+ schema: z.object({
79
+ company_number: z.string().optional().describe('Registry number — exact match (recommended).'),
80
+ company_name: z.string().optional().describe('Company name — fuzzy match.'),
81
+ country: Country.optional(),
82
+ limit: z.number().int().min(1).max(200).default(50).describe('Maximum events to return (1–200, default 50).'),
83
+ }),
84
+ handler: (args) => safeCall(() => getClient().get('/company-events/timeline', args)),
85
+ },
86
+ // ── People ───────────────────────────────────────────────────────────────
87
+ {
88
+ name: 'person_detail',
89
+ description: 'Fetch a single person (officer / director) by Prometiam internal ID. Returns the person\'s full appointment history across all companies. Useful for director-network analysis and counterparty due diligence. Get the ID from a company_detail response.',
90
+ schema: z.object({
91
+ id: z.union([z.number().int(), z.string()]).describe('Prometiam internal person ID (integer).'),
92
+ }),
93
+ handler: (args) => safeCall(() => getClient().get(`/people/${args.id}`)),
94
+ },
95
+ // ── Sanctions ────────────────────────────────────────────────────────────
96
+ {
97
+ name: 'sanctions_screen',
98
+ description: 'Screen a person or entity name against five sanctions lists — EU consolidated, UN, OFAC, UK OFSI, and the French Registre des gels — with trigram fuzzy match. Returns matches with confidence score (0–100), source list, and aliases. Use threshold to control match strictness.',
99
+ schema: z.object({
100
+ name: z.string().min(2).describe('Name to screen.'),
101
+ threshold: z.number().int().min(50).max(100).default(80).describe('Minimum match-confidence percentage (50–100, default 80).'),
102
+ entity_type: z.enum(['person', 'entity', 'vessel', 'any']).default('any'),
103
+ limit: z.number().int().min(1).max(100).default(20),
104
+ }),
105
+ handler: (args) => safeCall(() => getClient().get('/sanctions/screen', args)),
106
+ },
107
+ // ── Notices ──────────────────────────────────────────────────────────────
108
+ {
109
+ name: 'notice_detail',
110
+ description: 'Fetch a registry gazette notice (PDF edition) by Prometiam internal ID. Returns edition metadata, parse status, the PDF URL, SHA-256 hash, and raw extracted text. Each Spanish BORME edition is one notice.',
111
+ schema: z.object({
112
+ id: z.union([z.number().int(), z.string()]).describe('Prometiam internal notice ID.'),
113
+ }),
114
+ handler: (args) => safeCall(() => getClient().get(`/notices/${args.id}`)),
115
+ },
116
+ // ── Coverage / account ───────────────────────────────────────────────────
117
+ {
118
+ name: 'coverage',
119
+ description: 'Returns dataset coverage statistics: per-country company count, event count, person count, latest filing date, and data sources. Use this when a user asks "what countries does Prometiam cover?" or "how fresh is the data?".',
120
+ schema: z.object({}),
121
+ handler: () => safeCall(() => getClient().get('/coverage')),
122
+ },
123
+ ];
124
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "prometiam-risk-mcp",
3
+ "version": "0.1.0",
4
+ "mcpName": "io.github.matiasmaquieira96/risk-mcp",
5
+ "description": "Model Context Protocol server for the Prometiam Risk Intelligence API — EU + UK company registry data, sanctions screening, and corporate-event monitoring as native MCP tools for Claude, Cursor, and any MCP-compatible client.",
6
+ "type": "module",
7
+ "main": "dist/index.js",
8
+ "bin": {
9
+ "prometiam-risk-mcp": "dist/index.js"
10
+ },
11
+ "files": [
12
+ "dist",
13
+ "README.md",
14
+ "LICENSE"
15
+ ],
16
+ "scripts": {
17
+ "build": "tsc",
18
+ "prepublishOnly": "npm run build",
19
+ "start": "node dist/index.js",
20
+ "dev": "tsc --watch",
21
+ "smoke": "echo '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\"}' | node dist/index.js"
22
+ },
23
+ "keywords": [
24
+ "mcp",
25
+ "model-context-protocol",
26
+ "claude",
27
+ "cursor",
28
+ "prometiam",
29
+ "company-registry",
30
+ "kyb",
31
+ "kyc",
32
+ "sanctions",
33
+ "compliance",
34
+ "borme",
35
+ "bodacc",
36
+ "companies-house",
37
+ "eu",
38
+ "uk"
39
+ ],
40
+ "author": "Prometiam <support@prometiam.com> (https://www.prometiam.com)",
41
+ "license": "MIT",
42
+ "homepage": "https://www.prometiam.com/risk-api",
43
+ "bugs": {
44
+ "url": "https://github.com/matiasmaquieira96/efinity/issues"
45
+ },
46
+ "repository": {
47
+ "type": "git",
48
+ "url": "git+https://github.com/matiasmaquieira96/efinity.git",
49
+ "directory": "mcp/risk-mcp"
50
+ },
51
+ "publishConfig": {
52
+ "access": "public"
53
+ },
54
+ "engines": {
55
+ "node": ">=18"
56
+ },
57
+ "dependencies": {
58
+ "@modelcontextprotocol/sdk": "^1.0.4",
59
+ "zod": "^3.23.8"
60
+ },
61
+ "devDependencies": {
62
+ "@types/node": "^22.0.0",
63
+ "typescript": "^5.5.0"
64
+ }
65
+ }