@proxenio-tech/mcp-server 1.0.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 Proxenio Technologies Ltd
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,154 @@
1
+ # Proxenio MCP Server
2
+
3
+ MCP (Model Context Protocol) server for the **Proxenio verified intent network**. Enables AI agents running in Claude Desktop, Cursor, VS Code, and other MCP-compatible clients to discover and interact with Proxenio's professional matching engine.
4
+
5
+ ## What It Does
6
+
7
+ This server gives your AI agent four tools:
8
+
9
+ | Tool | What it does |
10
+ |------|-------------|
11
+ | `proxenio_discover` | Learn about the platform, trust model, and API — no auth required |
12
+ | `proxenio_set_api_key` | Configure your Proxenio API key for authentication |
13
+ | `proxenio_get_matches` | Read your principal's verified professional matches |
14
+ | `proxenio_accept_match` | Accept an introduction request, creating a deal |
15
+
16
+ Your agent inherits the human principal's trust tier. It sees exactly what the principal sees — same matching engine, same rules, same skip layers. No shortcuts.
17
+
18
+ ## Prerequisites
19
+
20
+ - **Node.js** 18+
21
+ - A **Proxenio account** with a verified email and completed profile
22
+ - An **API key** generated at [proxenio.ai/agents](https://www.proxenio.ai/agents)
23
+
24
+ ## Installation
25
+
26
+ ```bash
27
+ # Clone or download
28
+ git clone https://github.com/proxenio/proxenio-mcp-server.git
29
+ cd proxenio-mcp-server
30
+
31
+ # Install dependencies
32
+ npm install
33
+
34
+ # Build
35
+ npm run build
36
+ ```
37
+
38
+ ## Usage with Claude Desktop
39
+
40
+ Add to your Claude Desktop configuration (`claude_desktop_config.json`):
41
+
42
+ ```json
43
+ {
44
+ "mcpServers": {
45
+ "proxenio": {
46
+ "command": "node",
47
+ "args": ["/path/to/proxenio-mcp-server/dist/index.js"]
48
+ }
49
+ }
50
+ }
51
+ ```
52
+
53
+ Then in Claude Desktop, you can say:
54
+
55
+ > "What is Proxenio?"
56
+ > → Claude uses `proxenio_discover` automatically
57
+
58
+ > "Connect to Proxenio with this key: prx_YOUR_KEY_HERE_________________"
59
+ > → Claude uses `proxenio_set_api_key`
60
+
61
+ > "Show me my professional matches"
62
+ > → Claude uses `proxenio_get_matches`
63
+
64
+ > "Accept the introduction from Maria Georgiou"
65
+ > → Claude uses `proxenio_accept_match`
66
+
67
+ ## Usage with Cursor
68
+
69
+ Add to your Cursor MCP settings:
70
+
71
+ ```json
72
+ {
73
+ "proxenio": {
74
+ "command": "node",
75
+ "args": ["/path/to/proxenio-mcp-server/dist/index.js"]
76
+ }
77
+ }
78
+ ```
79
+
80
+ ## Remote Deployment (HTTP)
81
+
82
+ For multi-client or cloud deployment:
83
+
84
+ ```bash
85
+ TRANSPORT=http PORT=3001 node dist/index.js
86
+ ```
87
+
88
+ The server exposes:
89
+ - `POST /mcp` — MCP protocol endpoint
90
+ - `GET /health` — Health check
91
+
92
+ ## Tools Reference
93
+
94
+ ### `proxenio_discover`
95
+
96
+ No authentication required. Returns platform info, trust model, capabilities, and links.
97
+
98
+ ### `proxenio_set_api_key`
99
+
100
+ | Parameter | Type | Required | Description |
101
+ |-----------|------|----------|-------------|
102
+ | `api_key` | string | Yes | Full API key (36 chars, starts with `prx_`) |
103
+
104
+ ### `proxenio_get_matches`
105
+
106
+ | Parameter | Type | Default | Description |
107
+ |-----------|------|---------|-------------|
108
+ | `filter_type` | `all\|premium\|strong\|regular` | `all` | Filter by match quality |
109
+ | `filter_status` | `all\|pending\|accepted` | `all` | Filter by status |
110
+ | `min_score` | number (40-100) | `40` | Minimum match score |
111
+
112
+ Returns: Principal info, matches with counterparty profiles, trust tiers, scores, and rate limit status.
113
+
114
+ ### `proxenio_accept_match`
115
+
116
+ | Parameter | Type | Required | Description |
117
+ |-----------|------|----------|-------------|
118
+ | `match_id` | string (UUID) | Yes | Match ID from `proxenio_get_matches` |
119
+
120
+ Returns: Confirmation, counterparty details, new deal ID, rate limit status.
121
+
122
+ **Guard rails**: Principal must be the receiving party. Cannot accept own requests. Match must be active with a pending intro.
123
+
124
+ ## Trust Model
125
+
126
+ - Agents inherit their human principal's trust tier at request time
127
+ - Trust tiers: 0 (Unverified) → 1 (Starter) → 2 (Active) → 3 (Trusted) → 4 (Proven)
128
+ - All 5 skip engine layers apply — agents cannot bypass any
129
+ - Counterparties see transparency badge: `🤖 AI Agent active on behalf of [Name]`
130
+ - Only humans can log outcomes and confirm deals
131
+
132
+ ## Rate Limits
133
+
134
+ - 60 requests/hour per API key
135
+ - 3 keys maximum per user (= 180 requests/hour total)
136
+ - Rate limit headers included in all responses
137
+
138
+ ## Security
139
+
140
+ - API keys are never logged or stored by the MCP server
141
+ - Keys are validated on format before use (prefix, length)
142
+ - All communication uses HTTPS
143
+ - The MCP server acts as a pass-through — no data is cached
144
+
145
+ ## Links
146
+
147
+ - **Platform**: [proxenio.ai](https://www.proxenio.ai)
148
+ - **Agent Docs**: [proxenio.ai/agents/docs](https://www.proxenio.ai/agents/docs)
149
+ - **Discovery Manifest**: [.well-known/proxenio.json](https://www.proxenio.ai/.well-known/proxenio.json)
150
+ - **OpenAPI Spec**: [api/agent/openapi.json](https://www.proxenio.ai/api/agent/openapi.json)
151
+
152
+ ## License
153
+
154
+ MIT — Proxenio Technologies Ltd
@@ -0,0 +1,9 @@
1
+ export declare const PROXENIO_API_BASE = "https://www.proxenio.ai/api/agent";
2
+ export declare const PROXENIO_URL = "https://www.proxenio.ai";
3
+ export declare const API_KEY_HEADER = "X-Proxenio-Key";
4
+ export declare const API_KEY_PREFIX = "prx_";
5
+ export declare const API_KEY_LENGTH = 36;
6
+ export declare const RATE_LIMIT_PER_HOUR = 60;
7
+ export declare const CHARACTER_LIMIT = 25000;
8
+ export declare const REQUEST_TIMEOUT_MS = 30000;
9
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,sCAAsC,CAAC;AACrE,eAAO,MAAM,YAAY,4BAA4B,CAAC;AACtD,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAC/C,eAAO,MAAM,cAAc,SAAS,CAAC;AACrC,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,eAAe,QAAQ,CAAC;AACrC,eAAO,MAAM,kBAAkB,QAAQ,CAAC"}
@@ -0,0 +1,10 @@
1
+ // Proxenio MCP Server Constants
2
+ export const PROXENIO_API_BASE = "https://www.proxenio.ai/api/agent";
3
+ export const PROXENIO_URL = "https://www.proxenio.ai";
4
+ export const API_KEY_HEADER = "X-Proxenio-Key";
5
+ export const API_KEY_PREFIX = "prx_";
6
+ export const API_KEY_LENGTH = 36;
7
+ export const RATE_LIMIT_PER_HOUR = 60;
8
+ export const CHARACTER_LIMIT = 25000;
9
+ export const REQUEST_TIMEOUT_MS = 30000;
10
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,MAAM,CAAC,MAAM,iBAAiB,GAAG,mCAAmC,CAAC;AACrE,MAAM,CAAC,MAAM,YAAY,GAAG,yBAAyB,CAAC;AACtD,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAC/C,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AACrC,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AACtC,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC;AACrC,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/env node
2
+ // Proxenio MCP Server
3
+ // Enables AI agents to discover, authenticate, and interact with the
4
+ // Proxenio verified intent network through the Model Context Protocol.
5
+ //
6
+ // Transport options:
7
+ // stdio (default): For local use with Claude Desktop, Cursor, etc.
8
+ // http: For remote deployment as a web service.
9
+ //
10
+ // Usage:
11
+ // TRANSPORT=stdio node dist/index.js (or just: node dist/index.js)
12
+ // TRANSPORT=http PORT=3000 node dist/index.js
13
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
14
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
15
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
16
+ import express from "express";
17
+ import { registerTools } from "./tools/register.js";
18
+ // Initialize the MCP server
19
+ const server = new McpServer({
20
+ name: "proxenio-mcp-server",
21
+ version: "1.0.0",
22
+ });
23
+ // Register all Proxenio tools
24
+ registerTools(server);
25
+ /**
26
+ * Run in stdio mode — for local clients like Claude Desktop and Cursor.
27
+ */
28
+ async function runStdio() {
29
+ const transport = new StdioServerTransport();
30
+ await server.connect(transport);
31
+ console.error("Proxenio MCP server running on stdio");
32
+ }
33
+ /**
34
+ * Run in HTTP mode — for remote deployment.
35
+ */
36
+ async function runHTTP() {
37
+ const app = express();
38
+ app.use(express.json());
39
+ // Health check
40
+ app.get("/health", (_req, res) => {
41
+ res.json({ status: "ok", server: "proxenio-mcp-server", version: "1.0.0" });
42
+ });
43
+ // MCP endpoint
44
+ app.post("/mcp", async (req, res) => {
45
+ const transport = new StreamableHTTPServerTransport({
46
+ sessionIdGenerator: undefined,
47
+ enableJsonResponse: true,
48
+ });
49
+ res.on("close", () => transport.close());
50
+ await server.connect(transport);
51
+ await transport.handleRequest(req, res, req.body);
52
+ });
53
+ const port = parseInt(process.env.PORT ?? "3001", 10);
54
+ app.listen(port, () => {
55
+ console.error(`Proxenio MCP server running on http://localhost:${port}/mcp`);
56
+ });
57
+ }
58
+ // Choose transport based on environment
59
+ const transport = process.env.TRANSPORT ?? "stdio";
60
+ if (transport === "http") {
61
+ runHTTP().catch((error) => {
62
+ console.error("Server error:", error);
63
+ process.exit(1);
64
+ });
65
+ }
66
+ else {
67
+ runStdio().catch((error) => {
68
+ console.error("Server error:", error);
69
+ process.exit(1);
70
+ });
71
+ }
72
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { z } from "zod";
2
+ export declare const SetApiKeyShape: {
3
+ api_key: z.ZodString;
4
+ };
5
+ export declare const GetMatchesShape: {
6
+ filter_type: z.ZodDefault<z.ZodEnum<["all", "premium", "strong", "regular"]>>;
7
+ filter_status: z.ZodDefault<z.ZodEnum<["all", "pending", "accepted"]>>;
8
+ min_score: z.ZodDefault<z.ZodNumber>;
9
+ };
10
+ export declare const AcceptMatchShape: {
11
+ match_id: z.ZodString;
12
+ };
13
+ export interface SetApiKeyInput {
14
+ api_key: string;
15
+ }
16
+ export interface GetMatchesInput {
17
+ filter_type: "all" | "premium" | "strong" | "regular";
18
+ filter_status: "all" | "pending" | "accepted";
19
+ min_score: number;
20
+ }
21
+ export interface AcceptMatchInput {
22
+ match_id: string;
23
+ }
24
+ //# sourceMappingURL=inputs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputs.d.ts","sourceRoot":"","sources":["../../src/schemas/inputs.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,cAAc;;CAU1B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;CAgB3B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;CAQ5B,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,KAAK,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtD,aAAa,EAAE,KAAK,GAAG,SAAS,GAAG,UAAU,CAAC;IAC9C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;CAClB"}
@@ -0,0 +1,37 @@
1
+ // Zod schemas for Proxenio MCP tool inputs
2
+ // MCP SDK expects raw Zod shapes (plain objects of Zod types), not ZodObjects
3
+ import { z } from "zod";
4
+ export const SetApiKeyShape = {
5
+ api_key: z
6
+ .string()
7
+ .min(36, "API key must be 36 characters")
8
+ .max(36, "API key must be 36 characters")
9
+ .startsWith("prx_", "API key must start with 'prx_'")
10
+ .describe("Proxenio API key (36 chars, starts with 'prx_'). " +
11
+ "Generated by the human principal at https://www.proxenio.ai/agents"),
12
+ };
13
+ export const GetMatchesShape = {
14
+ filter_type: z
15
+ .enum(["all", "premium", "strong", "regular"])
16
+ .default("all")
17
+ .describe("Filter matches by type: 'all', 'premium', 'strong', or 'regular'"),
18
+ filter_status: z
19
+ .enum(["all", "pending", "accepted"])
20
+ .default("all")
21
+ .describe("Filter matches by status: 'all', 'pending', or 'accepted'"),
22
+ min_score: z
23
+ .number()
24
+ .int()
25
+ .min(40)
26
+ .max(100)
27
+ .default(40)
28
+ .describe("Minimum match score to include (40-100). Default: 40"),
29
+ };
30
+ export const AcceptMatchShape = {
31
+ match_id: z
32
+ .string()
33
+ .uuid("match_id must be a valid UUID")
34
+ .describe("UUID of the match to accept. Get this from proxenio_get_matches. " +
35
+ "The principal must be the receiving party (user_b), not the requester."),
36
+ };
37
+ //# sourceMappingURL=inputs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputs.js","sourceRoot":"","sources":["../../src/schemas/inputs.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,8EAA8E;AAE9E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,CAAC,EAAE,EAAE,+BAA+B,CAAC;SACxC,GAAG,CAAC,EAAE,EAAE,+BAA+B,CAAC;SACxC,UAAU,CAAC,MAAM,EAAE,gCAAgC,CAAC;SACpD,QAAQ,CACP,mDAAmD;QACnD,oEAAoE,CACrE;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,WAAW,EAAE,CAAC;SACX,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;SAC7C,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,kEAAkE,CAAC;IAC/E,aAAa,EAAE,CAAC;SACb,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;SACpC,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,2DAA2D,CAAC;IACxE,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,EAAE,CAAC;SACP,GAAG,CAAC,GAAG,CAAC;SACR,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,sDAAsD,CAAC;CACpE,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,IAAI,CAAC,+BAA+B,CAAC;SACrC,QAAQ,CACP,mEAAmE;QACnE,wEAAwE,CACzE;CACJ,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { MatchesResponse, AcceptResponse, RateLimitHeaders } from "../types.js";
2
+ /**
3
+ * Set the API key for all subsequent requests.
4
+ * Validates format before storing.
5
+ */
6
+ export declare function setApiKey(key: string): void;
7
+ /**
8
+ * Get the current API key, or throw if not set.
9
+ */
10
+ export declare function getApiKey(): string;
11
+ /**
12
+ * Check if an API key is currently configured.
13
+ */
14
+ export declare function hasApiKey(): boolean;
15
+ /**
16
+ * GET /api/agent/matches — Read the principal's matches.
17
+ */
18
+ export declare function getMatches(): Promise<{
19
+ data: MatchesResponse;
20
+ rateLimit: RateLimitHeaders;
21
+ }>;
22
+ /**
23
+ * POST /api/agent/matches/accept — Accept an introduction.
24
+ */
25
+ export declare function acceptMatch(matchId: string): Promise<{
26
+ data: AcceptResponse;
27
+ rateLimit: RateLimitHeaders;
28
+ }>;
29
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/services/api.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAIrB;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAc3C;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAQlC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAyFD;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC;IAC1C,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,EAAE,gBAAgB,CAAC;CAC7B,CAAC,CAED;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1D,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,gBAAgB,CAAC;CAC7B,CAAC,CAID"}
@@ -0,0 +1,118 @@
1
+ // Proxenio API Client
2
+ // Handles all HTTP communication with the Proxenio agent API
3
+ import { PROXENIO_API_BASE, API_KEY_HEADER, API_KEY_PREFIX, API_KEY_LENGTH, REQUEST_TIMEOUT_MS, } from "../constants.js";
4
+ let apiKey = null;
5
+ /**
6
+ * Set the API key for all subsequent requests.
7
+ * Validates format before storing.
8
+ */
9
+ export function setApiKey(key) {
10
+ if (!key.startsWith(API_KEY_PREFIX)) {
11
+ throw new Error(`Invalid API key format. Key must start with '${API_KEY_PREFIX}'. ` +
12
+ `Generate a key at https://www.proxenio.ai/agents`);
13
+ }
14
+ if (key.length !== API_KEY_LENGTH) {
15
+ throw new Error(`Invalid API key length. Expected ${API_KEY_LENGTH} characters, got ${key.length}. ` +
16
+ `Generate a key at https://www.proxenio.ai/agents`);
17
+ }
18
+ apiKey = key;
19
+ }
20
+ /**
21
+ * Get the current API key, or throw if not set.
22
+ */
23
+ export function getApiKey() {
24
+ if (!apiKey) {
25
+ throw new Error("No API key configured. Use the proxenio_set_api_key tool first. " +
26
+ "If you don't have a key, the human principal must generate one at https://www.proxenio.ai/agents");
27
+ }
28
+ return apiKey;
29
+ }
30
+ /**
31
+ * Check if an API key is currently configured.
32
+ */
33
+ export function hasApiKey() {
34
+ return apiKey !== null;
35
+ }
36
+ /**
37
+ * Extract rate limit headers from a fetch Response.
38
+ */
39
+ function extractRateLimitHeaders(response) {
40
+ return {
41
+ limit: parseInt(response.headers.get("X-RateLimit-Limit") ?? "60", 10),
42
+ remaining: parseInt(response.headers.get("X-RateLimit-Remaining") ?? "0", 10),
43
+ reset: response.headers.get("X-RateLimit-Reset") ?? "",
44
+ };
45
+ }
46
+ /**
47
+ * Make an authenticated request to the Proxenio agent API.
48
+ */
49
+ async function makeRequest(endpoint, method = "GET", body) {
50
+ const key = getApiKey();
51
+ const url = `${PROXENIO_API_BASE}${endpoint}`;
52
+ const controller = new AbortController();
53
+ const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
54
+ try {
55
+ const response = await fetch(url, {
56
+ method,
57
+ headers: {
58
+ [API_KEY_HEADER]: key,
59
+ "Content-Type": "application/json",
60
+ Accept: "application/json",
61
+ },
62
+ ...(body ? { body: JSON.stringify(body) } : {}),
63
+ signal: controller.signal,
64
+ });
65
+ const rateLimit = extractRateLimitHeaders(response);
66
+ if (!response.ok) {
67
+ const errorBody = await response.json().catch(() => ({
68
+ error: `Request failed with status ${response.status}`,
69
+ }));
70
+ const errorMessage = errorBody.error ?? `HTTP ${response.status}`;
71
+ switch (response.status) {
72
+ case 401:
73
+ throw new Error(`Authentication failed: ${errorMessage}. ` +
74
+ `Check that your API key is valid and not revoked. ` +
75
+ `Generate a new key at https://www.proxenio.ai/agents`);
76
+ case 403:
77
+ throw new Error(`Access denied: ${errorMessage}. ` +
78
+ `The principal may not be authorized for this action.`);
79
+ case 404:
80
+ throw new Error(`Not found: ${errorMessage}.`);
81
+ case 429:
82
+ throw new Error(`Rate limit exceeded: ${errorMessage}. ` +
83
+ `Limit: ${rateLimit.limit}/hour. ` +
84
+ `Resets at: ${rateLimit.reset}. ` +
85
+ `Wait before making more requests.`);
86
+ default:
87
+ throw new Error(`API error (${response.status}): ${errorMessage}`);
88
+ }
89
+ }
90
+ const data = (await response.json());
91
+ return { data, rateLimit };
92
+ }
93
+ catch (error) {
94
+ if (error instanceof Error && error.name === "AbortError") {
95
+ throw new Error(`Request timed out after ${REQUEST_TIMEOUT_MS / 1000}s. ` +
96
+ `The Proxenio API may be temporarily unavailable. Try again.`);
97
+ }
98
+ throw error;
99
+ }
100
+ finally {
101
+ clearTimeout(timeout);
102
+ }
103
+ }
104
+ /**
105
+ * GET /api/agent/matches — Read the principal's matches.
106
+ */
107
+ export async function getMatches() {
108
+ return makeRequest("/matches");
109
+ }
110
+ /**
111
+ * POST /api/agent/matches/accept — Accept an introduction.
112
+ */
113
+ export async function acceptMatch(matchId) {
114
+ return makeRequest("/matches/accept", "POST", {
115
+ match_id: matchId,
116
+ });
117
+ }
118
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/services/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { MatchesResponse, AcceptResponse, RateLimitHeaders } from "../types.js";
2
+ /**
3
+ * Format the full matches response as markdown.
4
+ */
5
+ export declare function formatMatchesMarkdown(response: MatchesResponse, rateLimit: RateLimitHeaders): string;
6
+ /**
7
+ * Format the accept response as markdown.
8
+ */
9
+ export declare function formatAcceptMarkdown(response: AcceptResponse, rateLimit: RateLimitHeaders): string;
10
+ //# sourceMappingURL=formatting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../src/services/formatting.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,eAAe,EACf,cAAc,EACd,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAkCrB;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,gBAAgB,GAC1B,MAAM,CAmBR;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,gBAAgB,GAC1B,MAAM,CAeR"}
@@ -0,0 +1,68 @@
1
+ // Response formatting for Proxenio MCP tools
2
+ /**
3
+ * Format a trust tier number to its label.
4
+ */
5
+ function tierLabel(tier) {
6
+ const labels = {
7
+ 0: "Unverified",
8
+ 1: "Starter",
9
+ 2: "Active",
10
+ 3: "Trusted",
11
+ 4: "Proven",
12
+ };
13
+ return labels[tier] ?? `Tier ${tier}`;
14
+ }
15
+ /**
16
+ * Format a single match as readable markdown.
17
+ */
18
+ function formatMatch(match, index) {
19
+ const cp = match.counterparty;
20
+ const lines = [];
21
+ lines.push(`### ${index + 1}. ${cp.name} — ${cp.role}`);
22
+ lines.push(`**Score**: ${match.match_score}/100 (${match.match_type}) · **Status**: ${match.status}`);
23
+ lines.push(`**Industry**: ${cp.industry} · **Location**: ${cp.location}${cp.company ? ` · **Company**: ${cp.company}` : ""}`);
24
+ lines.push(`**Intent**: ${cp.intent_type}${cp.intent_description ? ` — ${cp.intent_description}` : ""}`);
25
+ lines.push(`**Trust**: ${tierLabel(cp.trust_tier)} · **PRO Score**: ${cp.pro_score} · **Verified**: ${cp.is_verified ? "Yes" : "No"} · **Confirmed outcomes**: ${cp.confirmed_outcomes}`);
26
+ lines.push(`**Match ID**: \`${match.match_id}\``);
27
+ lines.push("");
28
+ return lines.join("\n");
29
+ }
30
+ /**
31
+ * Format the full matches response as markdown.
32
+ */
33
+ export function formatMatchesMarkdown(response, rateLimit) {
34
+ const lines = [];
35
+ const p = response.principal;
36
+ lines.push("# Proxenio Matches");
37
+ lines.push("");
38
+ lines.push(`**Principal**: ${p.name} · ${tierLabel(p.trust_tier)} · PRO Score ${p.pro_score}`);
39
+ lines.push(`**Total matches**: ${response.meta.total_matches} · **Requests remaining**: ${rateLimit.remaining}/${rateLimit.limit}/hr`);
40
+ lines.push("");
41
+ if (response.matches.length === 0) {
42
+ lines.push("No matches found. The principal may need to complete their profile, declare intent, or build more trust.");
43
+ }
44
+ else {
45
+ response.matches.forEach((match, i) => {
46
+ lines.push(formatMatch(match, i));
47
+ });
48
+ }
49
+ return lines.join("\n");
50
+ }
51
+ /**
52
+ * Format the accept response as markdown.
53
+ */
54
+ export function formatAcceptMarkdown(response, rateLimit) {
55
+ const cp = response.match.counterparty;
56
+ const lines = [];
57
+ lines.push("# Introduction Accepted ✓");
58
+ lines.push("");
59
+ lines.push(`**Counterparty**: ${cp.name} — ${cp.role}, ${cp.industry}`);
60
+ lines.push(`**Match ID**: \`${response.match.match_id}\``);
61
+ lines.push(`**Deal created**: \`${response.deal_id}\``);
62
+ lines.push(`**Agent**: ${response.meta.agent}`);
63
+ lines.push(`**Requests remaining**: ${rateLimit.remaining}/${rateLimit.limit}/hr`);
64
+ lines.push("");
65
+ lines.push("The introduction is now connected. The human principal should follow up to close the deal and log outcomes.");
66
+ return lines.join("\n");
67
+ }
68
+ //# sourceMappingURL=formatting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/services/formatting.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAS7C;;GAEG;AACH,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,MAAM,GAA2B;QACrC,CAAC,EAAE,YAAY;QACf,CAAC,EAAE,SAAS;QACZ,CAAC,EAAE,QAAQ;QACX,CAAC,EAAE,SAAS;QACZ,CAAC,EAAE,QAAQ;KACZ,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,QAAQ,IAAI,EAAE,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,KAAY,EAAE,KAAa;IAC9C,MAAM,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC;IAC9B,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACxD,KAAK,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,WAAW,SAAS,KAAK,CAAC,UAAU,mBAAmB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACtG,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,QAAQ,oBAAoB,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9H,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzG,KAAK,CAAC,IAAI,CAAC,cAAc,SAAS,CAAC,EAAE,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,SAAS,oBAAoB,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,8BAA8B,EAAE,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC1L,KAAK,CAAC,IAAI,CAAC,mBAAmB,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;IAClD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAAyB,EACzB,SAA2B;IAE3B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC;IAE7B,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACjC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,MAAM,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IAC/F,KAAK,CAAC,IAAI,CAAC,sBAAsB,QAAQ,CAAC,IAAI,CAAC,aAAa,8BAA8B,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,KAAK,KAAK,CAAC,CAAC;IACvI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,0GAA0G,CAAC,CAAC;IACzH,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YACpC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAwB,EACxB,SAA2B;IAE3B,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC;IACvC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxE,KAAK,CAAC,IAAI,CAAC,mBAAmB,QAAQ,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;IAC3D,KAAK,CAAC,IAAI,CAAC,uBAAuB,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;IACxD,KAAK,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,2BAA2B,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,KAAK,KAAK,CAAC,CAAC;IACnF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,6GAA6G,CAAC,CAAC;IAE1H,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ /**
3
+ * Register all Proxenio tools on the MCP server.
4
+ */
5
+ export declare function registerTools(server: McpServer): void;
6
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/tools/register.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkBzE;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8PrD"}
@@ -0,0 +1,241 @@
1
+ import { SetApiKeyShape, GetMatchesShape, AcceptMatchShape, } from "../schemas/inputs.js";
2
+ import { setApiKey, hasApiKey, getMatches, acceptMatch, } from "../services/api.js";
3
+ import { formatMatchesMarkdown, formatAcceptMarkdown, } from "../services/formatting.js";
4
+ import { PROXENIO_URL, RATE_LIMIT_PER_HOUR } from "../constants.js";
5
+ /**
6
+ * Register all Proxenio tools on the MCP server.
7
+ */
8
+ export function registerTools(server) {
9
+ // ─── Tool 1: Platform Discovery ───
10
+ server.registerTool("proxenio_discover", {
11
+ title: "Discover Proxenio Platform",
12
+ description: `Get information about the Proxenio platform and its agent API.
13
+
14
+ Proxenio is a verified intent network for professional deal-making. AI agents can access their human principal's matches through API keys with inherited trust tiers.
15
+
16
+ This tool requires no authentication. Use it to understand the platform before connecting.
17
+
18
+ Returns:
19
+ Platform description, trust model, available capabilities, authentication method, and rate limits.
20
+
21
+ Examples:
22
+ - Use when: "What is Proxenio?" or "How do I connect to Proxenio?"
23
+ - Use when: Agent needs to understand what Proxenio offers before authenticating
24
+ - Don't use when: You already know about Proxenio and just need to read matches`,
25
+ inputSchema: {},
26
+ annotations: {
27
+ readOnlyHint: true,
28
+ destructiveHint: false,
29
+ idempotentHint: true,
30
+ openWorldHint: false,
31
+ },
32
+ }, async () => {
33
+ const info = [
34
+ "# Proxenio — Verified Intent Network",
35
+ "",
36
+ "## What It Is",
37
+ "Proxenio matches verified professionals based on declared intent and confirmed outcomes.",
38
+ "Trust is earned through behavioral proof, not claimed through profiles.",
39
+ "",
40
+ "## Agent Access",
41
+ `- **Base URL**: ${PROXENIO_URL}/api/agent`,
42
+ "- **Auth**: API key via `X-Proxenio-Key` header (prefix: `prx_`, 36 chars)",
43
+ "- **Key provisioning**: Human principal generates keys at /agents after email verification",
44
+ "- **Max keys**: 3 per user",
45
+ `- **Rate limit**: ${RATE_LIMIT_PER_HOUR} requests/hour per key`,
46
+ "",
47
+ "## Trust Model",
48
+ "- Agents inherit their human principal's trust tier at request time",
49
+ "- Trust tiers: 0 (Unverified) → 1 (Starter) → 2 (Active) → 3 (Trusted) → 4 (Proven)",
50
+ "- Agents cannot build independent trust or exceed their principal's tier",
51
+ "- Counterparties always see a transparency badge when interacting with an agent's principal",
52
+ "",
53
+ "## Available Tools",
54
+ "1. `proxenio_set_api_key` — Configure your API key (required before other operations)",
55
+ "2. `proxenio_get_matches` — Read principal's verified professional matches",
56
+ "3. `proxenio_accept_match` — Accept an introduction request on behalf of principal",
57
+ "",
58
+ "## Scope Limitations",
59
+ "- Agents CAN read matches and accept introductions",
60
+ "- Agents CANNOT request intros, close deals, log outcomes, or modify settings",
61
+ "- Agents CANNOT bypass the matching engine's skip layers or tier gates",
62
+ "",
63
+ `**Status**: ${hasApiKey() ? "✓ API key configured" : "⚠ No API key set — use proxenio_set_api_key first"}`,
64
+ "",
65
+ `**Links**: [Platform](${PROXENIO_URL}) · [API Docs](${PROXENIO_URL}/agents/docs) · [OpenAPI Spec](${PROXENIO_URL}/api/agent/openapi.json)`,
66
+ ];
67
+ return {
68
+ content: [{ type: "text", text: info.join("\n") }],
69
+ };
70
+ });
71
+ // ─── Tool 2: Set API Key ───
72
+ server.registerTool("proxenio_set_api_key", {
73
+ title: "Set Proxenio API Key",
74
+ description: `Configure the API key for authenticating with Proxenio's agent API.
75
+
76
+ This must be called before using proxenio_get_matches or proxenio_accept_match.
77
+
78
+ The API key is generated by a verified human principal at ${PROXENIO_URL}/agents. Keys are 36 characters, start with 'prx_', and inherit the principal's trust tier.
79
+
80
+ Args:
81
+ - api_key (string): The full API key starting with 'prx_' (36 characters)
82
+
83
+ Returns:
84
+ Confirmation that the key was set, or an error if the format is invalid.
85
+
86
+ Examples:
87
+ - Use when: Setting up Proxenio access for the first time
88
+ - Use when: Switching to a different principal's API key
89
+ - Don't use when: Key is already configured and working`,
90
+ inputSchema: SetApiKeyShape,
91
+ annotations: {
92
+ readOnlyHint: false,
93
+ destructiveHint: false,
94
+ idempotentHint: true,
95
+ openWorldHint: false,
96
+ },
97
+ }, async (params) => {
98
+ try {
99
+ setApiKey(params.api_key);
100
+ const prefix = params.api_key.substring(0, 12);
101
+ return {
102
+ content: [
103
+ {
104
+ type: "text",
105
+ text: `✓ API key configured (${prefix}…). You can now use proxenio_get_matches and proxenio_accept_match.`,
106
+ },
107
+ ],
108
+ };
109
+ }
110
+ catch (error) {
111
+ const message = error instanceof Error ? error.message : String(error);
112
+ return {
113
+ content: [{ type: "text", text: `Error: ${message}` }],
114
+ isError: true,
115
+ };
116
+ }
117
+ });
118
+ // ─── Tool 3: Get Matches ───
119
+ server.registerTool("proxenio_get_matches", {
120
+ title: "Get Proxenio Matches",
121
+ description: `Read the principal's verified professional matches from Proxenio.
122
+
123
+ Returns matches sorted by match score (descending). Each match includes counterparty profile, trust tier, PRO score, intent, verification status, and confirmed outcome count.
124
+
125
+ Requires: API key must be set via proxenio_set_api_key first.
126
+
127
+ The agent sees exactly what the human principal sees — same skip engine layers, same tier gates, same minimum score (40). Matches below 40 are never returned.
128
+
129
+ Args:
130
+ - filter_type ('all' | 'premium' | 'strong' | 'regular'): Filter by match quality tier (default: 'all')
131
+ - filter_status ('all' | 'pending' | 'accepted'): Filter by match status (default: 'all')
132
+ - min_score (number, 40-100): Minimum match score threshold (default: 40)
133
+
134
+ Returns:
135
+ Principal info, list of matches with full counterparty profiles, trust signals, and rate limit status.
136
+
137
+ Examples:
138
+ - Use when: "Show me my matches" or "What professional connections are available?"
139
+ - Use when: "Find my best matches" -> use filter_type='premium'
140
+ - Use when: "Which introductions are pending?" -> use filter_status='pending'
141
+ - Don't use when: API key has not been set yet (use proxenio_set_api_key first)
142
+
143
+ Error Handling:
144
+ - Returns auth error if API key is invalid or revoked
145
+ - Returns rate limit error if ${RATE_LIMIT_PER_HOUR} requests/hour exceeded
146
+ - Returns empty list if principal has no matches (profile may be incomplete)`,
147
+ inputSchema: GetMatchesShape,
148
+ annotations: {
149
+ readOnlyHint: true,
150
+ destructiveHint: false,
151
+ idempotentHint: true,
152
+ openWorldHint: true,
153
+ },
154
+ }, async (params) => {
155
+ try {
156
+ const { data, rateLimit } = await getMatches();
157
+ // Apply client-side filters
158
+ let filtered = data.matches;
159
+ if (params.filter_type !== "all") {
160
+ filtered = filtered.filter((m) => m.match_type === params.filter_type);
161
+ }
162
+ if (params.filter_status !== "all") {
163
+ filtered = filtered.filter((m) => m.status === params.filter_status);
164
+ }
165
+ if (params.min_score > 40) {
166
+ filtered = filtered.filter((m) => m.match_score >= params.min_score);
167
+ }
168
+ const filteredResponse = { ...data, matches: filtered, meta: { ...data.meta, total_matches: filtered.length } };
169
+ const markdown = formatMatchesMarkdown(filteredResponse, rateLimit);
170
+ return {
171
+ content: [{ type: "text", text: markdown }],
172
+ };
173
+ }
174
+ catch (error) {
175
+ const message = error instanceof Error ? error.message : String(error);
176
+ return {
177
+ content: [{ type: "text", text: `Error: ${message}` }],
178
+ isError: true,
179
+ };
180
+ }
181
+ });
182
+ // ─── Tool 4: Accept Match ───
183
+ server.registerTool("proxenio_accept_match", {
184
+ title: "Accept Proxenio Introduction",
185
+ description: `Accept an introduction request on behalf of the human principal.
186
+
187
+ This creates a deal between the principal and the counterparty. The principal must be the receiving party (user_b) — agents cannot accept introductions that the principal initiated.
188
+
189
+ IMPORTANT: This is an action with real consequences. It connects two professionals and creates a deal container. Only accept matches that align with the principal's stated intent.
190
+
191
+ Requires: API key must be set via proxenio_set_api_key first.
192
+
193
+ Args:
194
+ - match_id (string, UUID): The match ID to accept. Get this from proxenio_get_matches results.
195
+
196
+ Returns:
197
+ Confirmation with counterparty details, the new deal ID, and rate limit status.
198
+
199
+ Guard rails enforced by the API:
200
+ - Principal must be a participant in the match
201
+ - Principal must be the receiving party (user_b), not the requester
202
+ - Match must have an active status
203
+ - An introduction request must exist and be in pending/awaiting_consent state
204
+ - Agent cannot accept the principal's own outgoing requests
205
+
206
+ Examples:
207
+ - Use when: Principal wants to accept a specific pending introduction
208
+ - Use when: Agent decides a match aligns with principal's intent and should be accepted
209
+ - Don't use when: You haven't checked the match details first (use proxenio_get_matches)
210
+ - Don't use when: The match was initiated by the principal (agent can only accept incoming)
211
+
212
+ Error Handling:
213
+ - 400: Match not in correct state, no intro request exists
214
+ - 403: Principal is not authorized (e.g., they are the requester, not receiver)
215
+ - 404: Match ID not found
216
+ - 429: Rate limit exceeded`,
217
+ inputSchema: AcceptMatchShape,
218
+ annotations: {
219
+ readOnlyHint: false,
220
+ destructiveHint: false,
221
+ idempotentHint: false,
222
+ openWorldHint: true,
223
+ },
224
+ }, async (params) => {
225
+ try {
226
+ const { data, rateLimit } = await acceptMatch(params.match_id);
227
+ const markdown = formatAcceptMarkdown(data, rateLimit);
228
+ return {
229
+ content: [{ type: "text", text: markdown }],
230
+ };
231
+ }
232
+ catch (error) {
233
+ const message = error instanceof Error ? error.message : String(error);
234
+ return {
235
+ content: [{ type: "text", text: `Error: ${message}` }],
236
+ isError: true,
237
+ };
238
+ }
239
+ });
240
+ }
241
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/tools/register.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ export interface Principal {
2
+ id: string;
3
+ name: string;
4
+ trust_tier: number;
5
+ pro_score: number;
6
+ }
7
+ export interface Counterparty {
8
+ id: string;
9
+ name: string;
10
+ role: string;
11
+ industry: string;
12
+ location: string;
13
+ company?: string;
14
+ intent_type: string;
15
+ intent_description?: string;
16
+ trust_tier: number;
17
+ pro_score: number;
18
+ is_verified: boolean;
19
+ confirmed_outcomes: number;
20
+ }
21
+ export interface Match {
22
+ match_id: string;
23
+ status: "pending" | "accepted";
24
+ match_score: number;
25
+ match_type: "premium" | "strong" | "regular";
26
+ created_at: string;
27
+ counterparty: Counterparty;
28
+ }
29
+ export interface MatchesMeta {
30
+ agent: string;
31
+ scope: string;
32
+ total_matches: number;
33
+ requests_remaining: number;
34
+ timestamp: string;
35
+ }
36
+ export interface MatchesResponse {
37
+ principal: Principal;
38
+ matches: Match[];
39
+ meta: MatchesMeta;
40
+ }
41
+ export interface AcceptResponse {
42
+ success: true;
43
+ action: "accepted";
44
+ match: {
45
+ match_id: string;
46
+ status: "accepted";
47
+ counterparty: {
48
+ id: string;
49
+ name: string;
50
+ role: string;
51
+ industry: string;
52
+ };
53
+ };
54
+ deal_id: string;
55
+ meta: {
56
+ agent: string;
57
+ principal_id: string;
58
+ timestamp: string;
59
+ };
60
+ }
61
+ export interface ProxenioError {
62
+ error: string;
63
+ }
64
+ export interface RateLimitError {
65
+ error: string;
66
+ retry_after: number;
67
+ reset_at: string;
68
+ }
69
+ export interface RateLimitHeaders {
70
+ limit: number;
71
+ remaining: number;
72
+ reset: string;
73
+ }
74
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,KAAK;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,UAAU,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,KAAK,EAAE,CAAC;IACjB,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,UAAU,CAAC;QACnB,YAAY,EAAE;YACZ,EAAE,EAAE,MAAM,CAAC;YACX,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;YACb,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;KACH,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ // Proxenio API Type Definitions
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,gCAAgC"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@proxenio-tech/mcp-server",
3
+ "version": "1.0.0",
4
+ "description": "MCP server for Proxenio — enables AI agents to discover, authenticate, and interact with the Proxenio verified intent network.",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "proxenio-mcp-server": "dist/index.js"
8
+ },
9
+ "type": "module",
10
+ "files": [
11
+ "dist",
12
+ "README.md",
13
+ "LICENSE"
14
+ ],
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "start": "node dist/index.js",
18
+ "dev": "tsc --watch"
19
+ },
20
+ "keywords": [
21
+ "mcp",
22
+ "mcp-server",
23
+ "proxenio",
24
+ "ai-agents",
25
+ "model-context-protocol",
26
+ "trust-network",
27
+ "professional-matching",
28
+ "deal-making",
29
+ "agent-discovery"
30
+ ],
31
+ "author": "Proxenio Technologies Ltd",
32
+ "license": "MIT",
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "https://github.com/proxenio/proxenio-mcp-server.git"
36
+ },
37
+ "homepage": "https://www.proxenio.ai",
38
+ "engines": {
39
+ "node": ">=18.0.0"
40
+ },
41
+ "dependencies": {
42
+ "@modelcontextprotocol/sdk": "^1.12.0",
43
+ "express": "^4.21.0",
44
+ "zod": "^3.23.0"
45
+ },
46
+ "devDependencies": {
47
+ "@types/express": "^5.0.0",
48
+ "@types/node": "^22.0.0",
49
+ "typescript": "^5.7.0"
50
+ }
51
+ }