magpipe-mcp-server 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.
Files changed (44) hide show
  1. package/README.md +141 -0
  2. package/dist/client.d.ts +6 -0
  3. package/dist/client.js +43 -0
  4. package/dist/client.js.map +1 -0
  5. package/dist/index.d.ts +2 -0
  6. package/dist/index.js +23 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/tools/agents.d.ts +3 -0
  9. package/dist/tools/agents.js +86 -0
  10. package/dist/tools/agents.js.map +1 -0
  11. package/dist/tools/api-keys.d.ts +3 -0
  12. package/dist/tools/api-keys.js +29 -0
  13. package/dist/tools/api-keys.js.map +1 -0
  14. package/dist/tools/calendar.d.ts +3 -0
  15. package/dist/tools/calendar.js +42 -0
  16. package/dist/tools/calendar.js.map +1 -0
  17. package/dist/tools/calls.d.ts +3 -0
  18. package/dist/tools/calls.js +68 -0
  19. package/dist/tools/calls.js.map +1 -0
  20. package/dist/tools/contacts.d.ts +3 -0
  21. package/dist/tools/contacts.js +71 -0
  22. package/dist/tools/contacts.js.map +1 -0
  23. package/dist/tools/index.d.ts +3 -0
  24. package/dist/tools/index.js +23 -0
  25. package/dist/tools/index.js.map +1 -0
  26. package/dist/tools/knowledge.d.ts +3 -0
  27. package/dist/tools/knowledge.js +59 -0
  28. package/dist/tools/knowledge.js.map +1 -0
  29. package/dist/tools/messages.d.ts +3 -0
  30. package/dist/tools/messages.js +45 -0
  31. package/dist/tools/messages.js.map +1 -0
  32. package/dist/tools/misc.d.ts +3 -0
  33. package/dist/tools/misc.js +106 -0
  34. package/dist/tools/misc.js.map +1 -0
  35. package/dist/tools/numbers.d.ts +3 -0
  36. package/dist/tools/numbers.js +58 -0
  37. package/dist/tools/numbers.js.map +1 -0
  38. package/dist/tools/voices.d.ts +3 -0
  39. package/dist/tools/voices.js +23 -0
  40. package/dist/tools/voices.js.map +1 -0
  41. package/dist/types.d.ts +3 -0
  42. package/dist/types.js +12 -0
  43. package/dist/types.js.map +1 -0
  44. package/package.json +30 -0
package/README.md ADDED
@@ -0,0 +1,141 @@
1
+ # magpipe-mcp-server
2
+
3
+ MCP server for [Magpipe](https://magpipe.ai) — manage agents, calls, SMS, contacts, and phone numbers from AI coding tools like Claude Code and Cursor.
4
+
5
+ ## Install
6
+
7
+ ```sh
8
+ npm install -g magpipe-mcp-server
9
+ ```
10
+
11
+ Or run directly with npx:
12
+
13
+ ```sh
14
+ npx magpipe-mcp-server
15
+ ```
16
+
17
+ ## Setup
18
+
19
+ ### 1. Get an API key
20
+
21
+ Go to [magpipe.ai/settings](https://magpipe.ai/settings) → **API** tab → **Generate New Key**.
22
+
23
+ ### 2. Configure your AI tool
24
+
25
+ #### Claude Code
26
+
27
+ Add to `~/.claude.json`:
28
+
29
+ ```json
30
+ {
31
+ "mcpServers": {
32
+ "magpipe": {
33
+ "command": "npx",
34
+ "args": ["-y", "magpipe-mcp-server"],
35
+ "env": {
36
+ "MAGPIPE_API_KEY": "mgp_your_key_here"
37
+ }
38
+ }
39
+ }
40
+ }
41
+ ```
42
+
43
+ #### Cursor
44
+
45
+ Add to `.cursor/mcp.json`:
46
+
47
+ ```json
48
+ {
49
+ "mcpServers": {
50
+ "magpipe": {
51
+ "command": "npx",
52
+ "args": ["-y", "magpipe-mcp-server"],
53
+ "env": {
54
+ "MAGPIPE_API_KEY": "mgp_your_key_here"
55
+ }
56
+ }
57
+ }
58
+ }
59
+ ```
60
+
61
+ ## Environment Variables
62
+
63
+ | Variable | Required | Description |
64
+ |---|---|---|
65
+ | `MAGPIPE_API_KEY` | Yes | API key starting with `mgp_` |
66
+ | `MAGPIPE_API_URL` | No | Override API base URL (default: `https://api.magpipe.ai/functions/v1`) |
67
+
68
+ ## Available Tools
69
+
70
+ ### Agents
71
+ - `list_agents` — List all agents with optional filters
72
+ - `get_agent` — Get full agent details including assigned phone numbers, custom functions, knowledge sources, and dynamic variables
73
+ - `create_agent` — Create a new agent
74
+ - `update_agent` — Update agent configuration
75
+ - `delete_agent` — Delete an agent
76
+
77
+ ### Calls
78
+ - `list_calls` — List call records with filters
79
+ - `get_call` — Get call details, transcript, and summary
80
+ - `initiate_call` — Place an outbound call
81
+ - `terminate_call` — End an active call
82
+ - `get_recording` — Get a signed recording URL
83
+
84
+ ### Messages
85
+ - `list_messages` — List SMS messages
86
+ - `get_message` — Get a single message
87
+ - `send_sms` — Send an SMS
88
+
89
+ ### Phone Numbers
90
+ - `list_phone_numbers` — List provisioned numbers
91
+ - `search_phone_numbers` — Search available numbers to purchase
92
+ - `provision_phone_number` — Purchase a number
93
+ - `release_phone_number` — Release a number
94
+
95
+ ### Contacts
96
+ - `list_contacts` — List contacts with search and filters
97
+ - `get_contact` — Get contact details
98
+ - `create_contact` — Create a contact
99
+ - `update_contact` — Update a contact
100
+ - `delete_contact` — Delete a contact
101
+
102
+ ### Knowledge Base
103
+ - `list_knowledge_sources` — List knowledge sources for an agent
104
+ - `add_knowledge_source` — Add URL-based knowledge
105
+ - `add_knowledge_manual` — Add manual text knowledge
106
+ - `delete_knowledge_source` — Delete a knowledge source
107
+ - `sync_knowledge_source` — Re-crawl a URL source
108
+
109
+ ### Voices
110
+ - `list_voices` — List available voices
111
+ - `delete_voice` — Delete a cloned voice
112
+
113
+ ### Calendar
114
+ - `get_calendar_slots` — Get available booking slots
115
+ - `create_booking` — Create a booking
116
+ - `cancel_booking` — Cancel a booking
117
+
118
+ ### API Keys
119
+ - `manage_api_keys` — Generate, list, revoke, or update API keys
120
+
121
+ ### Other
122
+ - `list_models` — List available LLM models
123
+ - `chat_with_agent` — Send a text message to an agent
124
+ - `list_chat_sessions` — List chat sessions
125
+ - `list_custom_functions` — List custom functions
126
+ - `create_custom_function` — Create a custom function
127
+ - `manage_dynamic_variables` — Manage data extraction variables
128
+ - `list_scheduled_actions` — List scheduled actions
129
+
130
+ ## Development
131
+
132
+ ```sh
133
+ cd packages/mcp-server
134
+ npm install
135
+ npm run build
136
+ MAGPIPE_API_KEY=mgp_xxx node dist/index.js
137
+ ```
138
+
139
+ ## License
140
+
141
+ MIT
@@ -0,0 +1,6 @@
1
+ export declare class MagpipeClient {
2
+ private baseUrl;
3
+ private apiKey;
4
+ constructor(apiKey: string, apiUrl?: string);
5
+ call<T = unknown>(endpoint: string, body?: Record<string, unknown>): Promise<T>;
6
+ }
package/dist/client.js ADDED
@@ -0,0 +1,43 @@
1
+ const DEFAULT_API_URL = "https://api.magpipe.ai/functions/v1";
2
+ export class MagpipeClient {
3
+ baseUrl;
4
+ apiKey;
5
+ constructor(apiKey, apiUrl) {
6
+ this.apiKey = apiKey;
7
+ this.baseUrl = (apiUrl || DEFAULT_API_URL).replace(/\/$/, "");
8
+ }
9
+ async call(endpoint, body = {}) {
10
+ const url = `${this.baseUrl}/${endpoint}`;
11
+ const res = await fetch(url, {
12
+ method: "POST",
13
+ headers: {
14
+ Authorization: `Bearer ${this.apiKey}`,
15
+ "Content-Type": "application/json",
16
+ },
17
+ body: JSON.stringify(body),
18
+ });
19
+ const text = await res.text();
20
+ let data;
21
+ try {
22
+ data = JSON.parse(text);
23
+ }
24
+ catch {
25
+ if (!res.ok) {
26
+ throw new Error(`HTTP ${res.status}: ${text}`);
27
+ }
28
+ data = { raw: text };
29
+ }
30
+ if (!res.ok) {
31
+ const errMsg = data?.error &&
32
+ typeof data.error === "object"
33
+ ? (data.error.message ??
34
+ JSON.stringify(data.error))
35
+ : typeof data?.error === "string"
36
+ ? data.error
37
+ : text;
38
+ throw new Error(`API error (${res.status}): ${errMsg}`);
39
+ }
40
+ return data;
41
+ }
42
+ }
43
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG,qCAAqC,CAAC;AAE9D,MAAM,OAAO,aAAa;IAChB,OAAO,CAAS;IAChB,MAAM,CAAS;IAEvB,YAAY,MAAc,EAAE,MAAe;QACzC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,CAAC,MAAM,IAAI,eAAe,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,IAAI,CACR,QAAgB,EAChB,OAAgC,EAAE;QAElC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;gBACtC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,IAAa,CAAC;QAClB,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;YACjD,CAAC;YACD,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,MAAM,GACT,IAAgC,EAAE,KAAK;gBACxC,OAAQ,IAAgC,CAAC,KAAK,KAAK,QAAQ;gBACzD,CAAC,CAAC,CAAE,IAA+C,CAAC,KAAK,CAAC,OAAO;oBAC/D,IAAI,CAAC,SAAS,CAAE,IAAgC,CAAC,KAAK,CAAC,CAAC;gBAC1D,CAAC,CAAC,OAAQ,IAAgC,EAAE,KAAK,KAAK,QAAQ;oBAC5D,CAAC,CAAE,IAA+B,CAAC,KAAK;oBACxC,CAAC,CAAC,IAAI,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC,MAAM,MAAM,MAAM,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,IAAS,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { MagpipeClient } from "./client.js";
5
+ import { registerAllTools } from "./tools/index.js";
6
+ const apiKey = process.env.MAGPIPE_API_KEY;
7
+ if (!apiKey) {
8
+ console.error("MAGPIPE_API_KEY is required. Generate one at https://magpipe.ai/settings (API tab).");
9
+ process.exit(1);
10
+ }
11
+ if (!apiKey.startsWith("mgp_")) {
12
+ console.error("Invalid API key format. Keys start with mgp_. Generate one at https://magpipe.ai/settings.");
13
+ process.exit(1);
14
+ }
15
+ const client = new MagpipeClient(apiKey, process.env.MAGPIPE_API_URL);
16
+ const server = new McpServer({
17
+ name: "magpipe",
18
+ version: "0.1.0",
19
+ });
20
+ registerAllTools(server, client);
21
+ const transport = new StdioServerTransport();
22
+ await server.connect(transport);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;AAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;IACZ,OAAO,CAAC,KAAK,CACX,qFAAqF,CACtF,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;IAC/B,OAAO,CAAC,KAAK,CACX,4FAA4F,CAC7F,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAEtE,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEjC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { MagpipeClient } from "../client.js";
3
+ export declare function registerAgentTools(server: McpServer, client: MagpipeClient): void;
@@ -0,0 +1,86 @@
1
+ import { z } from "zod";
2
+ import { formatToolResponse, formatError } from "../types.js";
3
+ export function registerAgentTools(server, client) {
4
+ server.tool("list_agents", "List all AI agents in your account with optional filters", {
5
+ limit: z.number().optional().describe("Max results (default 50)"),
6
+ offset: z.number().optional().describe("Pagination offset"),
7
+ is_active: z.boolean().optional().describe("Filter by active status"),
8
+ agent_type: z
9
+ .string()
10
+ .optional()
11
+ .describe("Filter by type: inbound, outbound, hybrid"),
12
+ }, async ({ limit, offset, is_active, agent_type }) => {
13
+ try {
14
+ return formatToolResponse(await client.call("list-agents", { limit, offset, is_active, agent_type }));
15
+ }
16
+ catch (e) {
17
+ return formatError(e);
18
+ }
19
+ });
20
+ server.tool("get_agent", "Get full agent details: config (voice, language, model, prompt, temperature, memory settings), assigned phone numbers, custom functions, knowledge sources, and dynamic variables", {
21
+ agent_id: z.string().describe("Agent UUID"),
22
+ }, async ({ agent_id }) => {
23
+ try {
24
+ return formatToolResponse(await client.call("get-agent", { agent_id }));
25
+ }
26
+ catch (e) {
27
+ return formatError(e);
28
+ }
29
+ });
30
+ server.tool("create_agent", "Create a new AI agent with the given configuration", {
31
+ name: z.string().describe("Agent name"),
32
+ greeting: z.string().optional().describe("Initial greeting when agent answers"),
33
+ system_prompt: z.string().optional().describe("System prompt / persona instructions"),
34
+ voice_id: z.string().optional().describe("ElevenLabs voice ID"),
35
+ llm_model: z.string().optional().describe("LLM model identifier"),
36
+ language: z.string().optional().describe("Language code (e.g. en)"),
37
+ agent_type: z.string().optional().describe("inbound, outbound, or hybrid"),
38
+ organization_name: z.string().optional().describe("Organization the agent represents"),
39
+ owner_name: z.string().optional().describe("Owner / operator name"),
40
+ agent_role: z.string().optional().describe("Role description"),
41
+ transfer_phone_number: z.string().optional().describe("Phone number for call transfers"),
42
+ is_active: z.boolean().optional().describe("Whether agent is active"),
43
+ temperature: z.number().optional().describe("LLM temperature (0-2)"),
44
+ }, async (args) => {
45
+ try {
46
+ return formatToolResponse(await client.call("create-agent", args));
47
+ }
48
+ catch (e) {
49
+ return formatError(e);
50
+ }
51
+ });
52
+ server.tool("update_agent", "Update an existing agent's configuration", {
53
+ agent_id: z.string().describe("Agent UUID to update"),
54
+ name: z.string().optional().describe("Agent name"),
55
+ greeting: z.string().optional().describe("Initial greeting"),
56
+ system_prompt: z.string().optional().describe("System prompt"),
57
+ voice_id: z.string().optional().describe("ElevenLabs voice ID"),
58
+ llm_model: z.string().optional().describe("LLM model"),
59
+ language: z.string().optional().describe("Language code"),
60
+ agent_type: z.string().optional().describe("inbound, outbound, or hybrid"),
61
+ organization_name: z.string().optional().describe("Organization name"),
62
+ owner_name: z.string().optional().describe("Owner name"),
63
+ agent_role: z.string().optional().describe("Role description"),
64
+ transfer_phone_number: z.string().optional().describe("Transfer number"),
65
+ is_active: z.boolean().optional().describe("Active status"),
66
+ temperature: z.number().optional().describe("LLM temperature"),
67
+ }, async (args) => {
68
+ try {
69
+ return formatToolResponse(await client.call("update-agent", args));
70
+ }
71
+ catch (e) {
72
+ return formatError(e);
73
+ }
74
+ });
75
+ server.tool("delete_agent", "Permanently delete an agent", {
76
+ agent_id: z.string().describe("Agent UUID to delete"),
77
+ }, async ({ agent_id }) => {
78
+ try {
79
+ return formatToolResponse(await client.call("delete-agent", { agent_id }));
80
+ }
81
+ catch (e) {
82
+ return formatError(e);
83
+ }
84
+ });
85
+ }
86
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/tools/agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { MagpipeClient } from "../client.js";
3
+ export declare function registerApiKeyTools(server: McpServer, client: MagpipeClient): void;
@@ -0,0 +1,29 @@
1
+ import { z } from "zod";
2
+ import { formatToolResponse, formatError } from "../types.js";
3
+ export function registerApiKeyTools(server, client) {
4
+ server.tool("manage_api_keys", "Manage API keys: generate, list, revoke, or update webhook URL. Set 'action' to one of: generate, list, revoke, update.", {
5
+ action: z
6
+ .enum(["generate", "list", "revoke", "update"])
7
+ .describe("Action to perform"),
8
+ name: z
9
+ .string()
10
+ .optional()
11
+ .describe("Key name (required for generate)"),
12
+ key_id: z
13
+ .string()
14
+ .optional()
15
+ .describe("Key UUID (required for revoke/update)"),
16
+ webhook_url: z
17
+ .string()
18
+ .optional()
19
+ .describe("Webhook URL (for generate or update)"),
20
+ }, async (args) => {
21
+ try {
22
+ return formatToolResponse(await client.call("manage-api-keys", args));
23
+ }
24
+ catch (e) {
25
+ return formatError(e);
26
+ }
27
+ });
28
+ }
29
+ //# sourceMappingURL=api-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-keys.js","sourceRoot":"","sources":["../../src/tools/api-keys.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,MAAqB;IAC1E,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,yHAAyH,EACzH;QACE,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;aAC9C,QAAQ,CAAC,mBAAmB,CAAC;QAChC,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,kCAAkC,CAAC;QAC/C,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,uCAAuC,CAAC;QACpD,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,sCAAsC,CAAC;KACpD,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,OAAO,kBAAkB,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC;QACxE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { MagpipeClient } from "../client.js";
3
+ export declare function registerCalendarTools(server: McpServer, client: MagpipeClient): void;
@@ -0,0 +1,42 @@
1
+ import { z } from "zod";
2
+ import { formatToolResponse, formatError } from "../types.js";
3
+ export function registerCalendarTools(server, client) {
4
+ server.tool("get_calendar_slots", "Get available booking slots for a Cal.com event type", {
5
+ event_type_id: z.number().describe("Cal.com event type ID"),
6
+ start: z.string().describe("Range start (ISO 8601)"),
7
+ end: z.string().describe("Range end (ISO 8601)"),
8
+ }, async (args) => {
9
+ try {
10
+ return formatToolResponse(await client.call("cal-com-get-slots", args));
11
+ }
12
+ catch (e) {
13
+ return formatError(e);
14
+ }
15
+ });
16
+ server.tool("create_booking", "Create a Cal.com booking", {
17
+ event_type_id: z.number().describe("Cal.com event type ID"),
18
+ start: z.string().describe("Booking start time (ISO 8601)"),
19
+ name: z.string().describe("Attendee name"),
20
+ email: z.string().describe("Attendee email"),
21
+ phone: z.string().optional().describe("Attendee phone"),
22
+ notes: z.string().optional().describe("Booking notes"),
23
+ }, async (args) => {
24
+ try {
25
+ return formatToolResponse(await client.call("cal-com-create-booking", args));
26
+ }
27
+ catch (e) {
28
+ return formatError(e);
29
+ }
30
+ });
31
+ server.tool("cancel_booking", "Cancel a Cal.com booking", {
32
+ booking_id: z.number().describe("Booking ID to cancel"),
33
+ }, async ({ booking_id }) => {
34
+ try {
35
+ return formatToolResponse(await client.call("cal-com-cancel-booking", { booking_id }));
36
+ }
37
+ catch (e) {
38
+ return formatError(e);
39
+ }
40
+ });
41
+ }
42
+ //# sourceMappingURL=calendar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../src/tools/calendar.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,UAAU,qBAAqB,CACnC,MAAiB,EACjB,MAAqB;IAErB,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,sDAAsD,EACtD;QACE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC3D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACpD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;KACjD,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,OAAO,kBAAkB,CACvB,MAAM,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAC7C,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,0BAA0B,EAC1B;QACE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC3D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QAC3D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC1C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC5C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACvD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;KACvD,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,OAAO,kBAAkB,CACvB,MAAM,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAClD,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,0BAA0B,EAC1B;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;KACxD,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QACvB,IAAI,CAAC;YACH,OAAO,kBAAkB,CACvB,MAAM,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,UAAU,EAAE,CAAC,CAC5D,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { MagpipeClient } from "../client.js";
3
+ export declare function registerCallTools(server: McpServer, client: MagpipeClient): void;
@@ -0,0 +1,68 @@
1
+ import { z } from "zod";
2
+ import { formatToolResponse, formatError } from "../types.js";
3
+ export function registerCallTools(server, client) {
4
+ server.tool("list_calls", "List call records with optional filters for direction, status, date range, and agent", {
5
+ limit: z.number().optional().describe("Max results (default 50)"),
6
+ offset: z.number().optional().describe("Pagination offset"),
7
+ direction: z.string().optional().describe("Filter: inbound or outbound"),
8
+ status: z.string().optional().describe("Filter: completed, in-progress, failed, etc."),
9
+ agent_id: z.string().optional().describe("Filter by agent UUID"),
10
+ from_date: z.string().optional().describe("Start date (ISO 8601)"),
11
+ to_date: z.string().optional().describe("End date (ISO 8601)"),
12
+ phone_number: z.string().optional().describe("Filter by caller/callee number"),
13
+ }, async (args) => {
14
+ try {
15
+ return formatToolResponse(await client.call("list-calls", args));
16
+ }
17
+ catch (e) {
18
+ return formatError(e);
19
+ }
20
+ });
21
+ server.tool("get_call", "Get full call details including transcript, summary, recording URL, and metadata", {
22
+ call_id: z.string().describe("Call record UUID"),
23
+ }, async ({ call_id }) => {
24
+ try {
25
+ return formatToolResponse(await client.call("get-call", { call_id }));
26
+ }
27
+ catch (e) {
28
+ return formatError(e);
29
+ }
30
+ });
31
+ server.tool("initiate_call", "Place an outbound call. The agent will call the specified phone number.", {
32
+ phone_number: z.string().describe("Destination phone number (E.164 format)"),
33
+ caller_id: z
34
+ .string()
35
+ .describe("Caller ID — must be one of your provisioned service numbers"),
36
+ purpose: z.string().optional().describe("Purpose / context for the call"),
37
+ goal: z.string().optional().describe("Goal for the agent during the call"),
38
+ template_id: z.string().optional().describe("Call template UUID"),
39
+ }, async (args) => {
40
+ try {
41
+ return formatToolResponse(await client.call("initiate-bridged-call", args));
42
+ }
43
+ catch (e) {
44
+ return formatError(e);
45
+ }
46
+ });
47
+ server.tool("terminate_call", "End an active call by call ID or room name", {
48
+ call_id: z.string().describe("Call UUID or LiveKit room name"),
49
+ }, async ({ call_id }) => {
50
+ try {
51
+ return formatToolResponse(await client.call("terminate-call", { call_id }));
52
+ }
53
+ catch (e) {
54
+ return formatError(e);
55
+ }
56
+ });
57
+ server.tool("get_recording", "Get a signed URL to download a call recording", {
58
+ call_id: z.string().describe("Call record UUID"),
59
+ }, async ({ call_id }) => {
60
+ try {
61
+ return formatToolResponse(await client.call("get-signed-recording-url", { call_id }));
62
+ }
63
+ catch (e) {
64
+ return formatError(e);
65
+ }
66
+ });
67
+ }
68
+ //# sourceMappingURL=calls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calls.js","sourceRoot":"","sources":["../../src/tools/calls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { MagpipeClient } from "../client.js";
3
+ export declare function registerContactTools(server: McpServer, client: MagpipeClient): void;
@@ -0,0 +1,71 @@
1
+ import { z } from "zod";
2
+ import { formatToolResponse, formatError } from "../types.js";
3
+ export function registerContactTools(server, client) {
4
+ server.tool("list_contacts", "List contacts with search, tag filters, and sorting", {
5
+ limit: z.number().optional().describe("Max results (default 50)"),
6
+ offset: z.number().optional().describe("Pagination offset"),
7
+ search: z.string().optional().describe("Search name, phone, email, company"),
8
+ tags: z.array(z.string()).optional().describe("Filter by tags"),
9
+ sort_by: z.string().optional().describe("Sort field (default created_at)"),
10
+ sort_order: z.string().optional().describe("asc or desc"),
11
+ }, async (args) => {
12
+ try {
13
+ return formatToolResponse(await client.call("list-contacts", args));
14
+ }
15
+ catch (e) {
16
+ return formatError(e);
17
+ }
18
+ });
19
+ server.tool("get_contact", "Get a single contact by ID", {
20
+ contact_id: z.string().describe("Contact UUID"),
21
+ }, async ({ contact_id }) => {
22
+ try {
23
+ return formatToolResponse(await client.call("get-contact", { contact_id }));
24
+ }
25
+ catch (e) {
26
+ return formatError(e);
27
+ }
28
+ });
29
+ server.tool("create_contact", "Create a new contact", {
30
+ name: z.string().optional().describe("Contact name"),
31
+ phone_number: z.string().optional().describe("Phone number (E.164)"),
32
+ email: z.string().optional().describe("Email address"),
33
+ company: z.string().optional().describe("Company name"),
34
+ notes: z.string().optional().describe("Notes about the contact"),
35
+ tags: z.array(z.string()).optional().describe("Tags for categorization"),
36
+ }, async (args) => {
37
+ try {
38
+ return formatToolResponse(await client.call("create-contact", args));
39
+ }
40
+ catch (e) {
41
+ return formatError(e);
42
+ }
43
+ });
44
+ server.tool("update_contact", "Update an existing contact", {
45
+ contact_id: z.string().describe("Contact UUID to update"),
46
+ name: z.string().optional().describe("Contact name"),
47
+ phone_number: z.string().optional().describe("Phone number"),
48
+ email: z.string().optional().describe("Email address"),
49
+ company: z.string().optional().describe("Company name"),
50
+ notes: z.string().optional().describe("Notes"),
51
+ tags: z.array(z.string()).optional().describe("Tags"),
52
+ }, async (args) => {
53
+ try {
54
+ return formatToolResponse(await client.call("update-contact", args));
55
+ }
56
+ catch (e) {
57
+ return formatError(e);
58
+ }
59
+ });
60
+ server.tool("delete_contact", "Delete a contact", {
61
+ contact_id: z.string().describe("Contact UUID to delete"),
62
+ }, async ({ contact_id }) => {
63
+ try {
64
+ return formatToolResponse(await client.call("delete-contact", { contact_id }));
65
+ }
66
+ catch (e) {
67
+ return formatError(e);
68
+ }
69
+ });
70
+ }
71
+ //# sourceMappingURL=contacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../src/tools/contacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { MagpipeClient } from "../client.js";
3
+ export declare function registerAllTools(server: McpServer, client: MagpipeClient): void;
@@ -0,0 +1,23 @@
1
+ import { registerAgentTools } from "./agents.js";
2
+ import { registerCallTools } from "./calls.js";
3
+ import { registerMessageTools } from "./messages.js";
4
+ import { registerNumberTools } from "./numbers.js";
5
+ import { registerContactTools } from "./contacts.js";
6
+ import { registerKnowledgeTools } from "./knowledge.js";
7
+ import { registerVoiceTools } from "./voices.js";
8
+ import { registerCalendarTools } from "./calendar.js";
9
+ import { registerApiKeyTools } from "./api-keys.js";
10
+ import { registerMiscTools } from "./misc.js";
11
+ export function registerAllTools(server, client) {
12
+ registerAgentTools(server, client);
13
+ registerCallTools(server, client);
14
+ registerMessageTools(server, client);
15
+ registerNumberTools(server, client);
16
+ registerContactTools(server, client);
17
+ registerKnowledgeTools(server, client);
18
+ registerVoiceTools(server, client);
19
+ registerCalendarTools(server, client);
20
+ registerApiKeyTools(server, client);
21
+ registerMiscTools(server, client);
22
+ }
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,MAAqB;IACvE,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { MagpipeClient } from "../client.js";
3
+ export declare function registerKnowledgeTools(server: McpServer, client: MagpipeClient): void;
@@ -0,0 +1,59 @@
1
+ import { z } from "zod";
2
+ import { formatToolResponse, formatError } from "../types.js";
3
+ export function registerKnowledgeTools(server, client) {
4
+ server.tool("list_knowledge_sources", "List knowledge base sources for an agent", {
5
+ agent_id: z.string().describe("Agent UUID"),
6
+ }, async ({ agent_id }) => {
7
+ try {
8
+ return formatToolResponse(await client.call("knowledge-source-list", { agent_id }));
9
+ }
10
+ catch (e) {
11
+ return formatError(e);
12
+ }
13
+ });
14
+ server.tool("add_knowledge_source", "Add a URL-based knowledge source to an agent (will be crawled and indexed)", {
15
+ agent_id: z.string().describe("Agent UUID"),
16
+ url: z.string().optional().describe("Single URL to crawl"),
17
+ urls: z.array(z.string()).optional().describe("Multiple URLs to crawl"),
18
+ }, async (args) => {
19
+ try {
20
+ return formatToolResponse(await client.call("knowledge-source-add", args));
21
+ }
22
+ catch (e) {
23
+ return formatError(e);
24
+ }
25
+ });
26
+ server.tool("add_knowledge_manual", "Add a manual text knowledge entry to an agent", {
27
+ agent_id: z.string().describe("Agent UUID"),
28
+ title: z.string().describe("Title for this knowledge entry"),
29
+ content: z.string().describe("Text content to index"),
30
+ }, async (args) => {
31
+ try {
32
+ return formatToolResponse(await client.call("knowledge-source-manual", args));
33
+ }
34
+ catch (e) {
35
+ return formatError(e);
36
+ }
37
+ });
38
+ server.tool("delete_knowledge_source", "Delete a knowledge source and its indexed content", {
39
+ source_id: z.string().describe("Knowledge source UUID"),
40
+ }, async ({ source_id }) => {
41
+ try {
42
+ return formatToolResponse(await client.call("knowledge-source-delete", { source_id }));
43
+ }
44
+ catch (e) {
45
+ return formatError(e);
46
+ }
47
+ });
48
+ server.tool("sync_knowledge_source", "Re-crawl and re-index a URL-based knowledge source", {
49
+ source_id: z.string().describe("Knowledge source UUID"),
50
+ }, async ({ source_id }) => {
51
+ try {
52
+ return formatToolResponse(await client.call("knowledge-source-sync", { source_id }));
53
+ }
54
+ catch (e) {
55
+ return formatError(e);
56
+ }
57
+ });
58
+ }
59
+ //# sourceMappingURL=knowledge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../src/tools/knowledge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { MagpipeClient } from "../client.js";
3
+ export declare function registerMessageTools(server: McpServer, client: MagpipeClient): void;
@@ -0,0 +1,45 @@
1
+ import { z } from "zod";
2
+ import { formatToolResponse, formatError } from "../types.js";
3
+ export function registerMessageTools(server, client) {
4
+ server.tool("list_messages", "List SMS messages with optional filters for thread, direction, and date range", {
5
+ limit: z.number().optional().describe("Max results (default 50)"),
6
+ offset: z.number().optional().describe("Pagination offset"),
7
+ thread_id: z.string().optional().describe("Filter by conversation thread UUID"),
8
+ direction: z.string().optional().describe("Filter: inbound or outbound"),
9
+ phone_number: z.string().optional().describe("Filter by phone number"),
10
+ from_date: z.string().optional().describe("Start date (ISO 8601)"),
11
+ to_date: z.string().optional().describe("End date (ISO 8601)"),
12
+ }, async (args) => {
13
+ try {
14
+ return formatToolResponse(await client.call("list-messages", args));
15
+ }
16
+ catch (e) {
17
+ return formatError(e);
18
+ }
19
+ });
20
+ server.tool("get_message", "Get a single SMS message by ID", {
21
+ message_id: z.string().describe("Message UUID"),
22
+ }, async ({ message_id }) => {
23
+ try {
24
+ return formatToolResponse(await client.call("get-message", { message_id }));
25
+ }
26
+ catch (e) {
27
+ return formatError(e);
28
+ }
29
+ });
30
+ server.tool("send_sms", "Send an SMS message from one of your service numbers to a contact", {
31
+ serviceNumber: z
32
+ .string()
33
+ .describe("Your service number to send from (E.164)"),
34
+ contactPhone: z.string().describe("Recipient phone number (E.164)"),
35
+ message: z.string().describe("Message body"),
36
+ }, async (args) => {
37
+ try {
38
+ return formatToolResponse(await client.call("send-user-sms", args));
39
+ }
40
+ catch (e) {
41
+ return formatError(e);
42
+ }
43
+ });
44
+ }
45
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/tools/messages.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,MAAqB;IAC3E,MAAM,CAAC,IAAI,CACT,eAAe,EACf,+EAA+E,EAC/E;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACjE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC3D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAC/E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QACxE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACtE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAClE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;KAC/D,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,OAAO,kBAAkB,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,gCAAgC,EAChC;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;KAChD,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QACvB,IAAI,CAAC;YACH,OAAO,kBAAkB,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;QAC9E,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,UAAU,EACV,mEAAmE,EACnE;QACE,aAAa,EAAE,CAAC;aACb,MAAM,EAAE;aACR,QAAQ,CAAC,0CAA0C,CAAC;QACvD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QACnE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;KAC7C,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,OAAO,kBAAkB,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { MagpipeClient } from "../client.js";
3
+ export declare function registerMiscTools(server: McpServer, client: MagpipeClient): void;
@@ -0,0 +1,106 @@
1
+ import { z } from "zod";
2
+ import { formatToolResponse, formatError } from "../types.js";
3
+ export function registerMiscTools(server, client) {
4
+ server.tool("list_models", "List available LLM models for agent configuration", {}, async () => {
5
+ try {
6
+ return formatToolResponse(await client.call("list-models"));
7
+ }
8
+ catch (e) {
9
+ return formatError(e);
10
+ }
11
+ });
12
+ server.tool("chat_with_agent", "Send a text message to an agent and get a response (web chat, not phone call)", {
13
+ agent_id: z.string().describe("Agent UUID"),
14
+ message: z.string().describe("Message text"),
15
+ session_id: z.string().optional().describe("Existing chat session ID to continue"),
16
+ }, async (args) => {
17
+ try {
18
+ return formatToolResponse(await client.call("omni-chat", args));
19
+ }
20
+ catch (e) {
21
+ return formatError(e);
22
+ }
23
+ });
24
+ server.tool("list_chat_sessions", "List chat widget sessions", {
25
+ widget_id: z.string().optional().describe("Filter by widget UUID"),
26
+ limit: z.number().optional().describe("Max results"),
27
+ offset: z.number().optional().describe("Pagination offset"),
28
+ }, async (args) => {
29
+ try {
30
+ return formatToolResponse(await client.call("list-chat-sessions", args));
31
+ }
32
+ catch (e) {
33
+ return formatError(e);
34
+ }
35
+ });
36
+ server.tool("list_custom_functions", "List custom functions (tools) available to agents", {
37
+ agent_id: z.string().optional().describe("Filter by agent UUID"),
38
+ }, async (args) => {
39
+ try {
40
+ return formatToolResponse(await client.call("custom-functions", { action: "list", ...args }));
41
+ }
42
+ catch (e) {
43
+ return formatError(e);
44
+ }
45
+ });
46
+ server.tool("create_custom_function", "Create a custom function (tool) that agents can call during conversations", {
47
+ name: z.string().describe("Function name"),
48
+ description: z.string().describe("What the function does"),
49
+ endpoint_url: z.string().describe("Webhook URL to call"),
50
+ parameters: z
51
+ .record(z.unknown())
52
+ .optional()
53
+ .describe("JSON Schema for function parameters"),
54
+ agent_id: z.string().optional().describe("Assign to specific agent"),
55
+ }, async (args) => {
56
+ try {
57
+ return formatToolResponse(await client.call("custom-functions", { action: "create", ...args }));
58
+ }
59
+ catch (e) {
60
+ return formatError(e);
61
+ }
62
+ });
63
+ server.tool("manage_dynamic_variables", "Manage dynamic variables (data extraction) for an agent. Actions: list, create, update, delete.", {
64
+ action: z
65
+ .enum(["list", "create", "update", "delete"])
66
+ .describe("Action to perform"),
67
+ agent_id: z.string().describe("Agent UUID"),
68
+ variable_id: z.string().optional().describe("Variable UUID (for update/delete)"),
69
+ name: z.string().optional().describe("Variable name (for create/update)"),
70
+ description: z
71
+ .string()
72
+ .optional()
73
+ .describe("What data to extract (for create/update)"),
74
+ var_type: z
75
+ .string()
76
+ .optional()
77
+ .describe("Type: string, number, boolean, enum (for create)"),
78
+ enum_options: z
79
+ .array(z.string())
80
+ .optional()
81
+ .describe("Enum options (when var_type is enum)"),
82
+ }, async (args) => {
83
+ try {
84
+ return formatToolResponse(await client.call("manage-dynamic-variables", args));
85
+ }
86
+ catch (e) {
87
+ return formatError(e);
88
+ }
89
+ });
90
+ server.tool("list_scheduled_actions", "List scheduled actions (future calls, reminders, etc.)", {
91
+ limit: z.number().optional().describe("Max results"),
92
+ offset: z.number().optional().describe("Pagination offset"),
93
+ status: z.string().optional().describe("Filter by status"),
94
+ }, async (args) => {
95
+ try {
96
+ return formatToolResponse(await client.call("process-scheduled-actions", {
97
+ action: "list",
98
+ ...args,
99
+ }));
100
+ }
101
+ catch (e) {
102
+ return formatError(e);
103
+ }
104
+ });
105
+ }
106
+ //# sourceMappingURL=misc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"misc.js","sourceRoot":"","sources":["../../src/tools/misc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { MagpipeClient } from "../client.js";
3
+ export declare function registerNumberTools(server: McpServer, client: MagpipeClient): void;
@@ -0,0 +1,58 @@
1
+ import { z } from "zod";
2
+ import { formatToolResponse, formatError } from "../types.js";
3
+ export function registerNumberTools(server, client) {
4
+ server.tool("list_phone_numbers", "List your provisioned phone numbers with agent assignments", {
5
+ limit: z.number().optional().describe("Max results (default 50)"),
6
+ offset: z.number().optional().describe("Pagination offset"),
7
+ agent_id: z.string().optional().describe("Filter by assigned agent UUID"),
8
+ is_active: z.boolean().optional().describe("Filter by active status"),
9
+ }, async (args) => {
10
+ try {
11
+ return formatToolResponse(await client.call("list-phone-numbers", args));
12
+ }
13
+ catch (e) {
14
+ return formatError(e);
15
+ }
16
+ });
17
+ server.tool("search_phone_numbers", "Search available phone numbers to purchase by area code, city, or type", {
18
+ areaCode: z.string().optional().describe("Area code to search (e.g. 604)"),
19
+ city: z.string().optional().describe("City name"),
20
+ state: z.string().optional().describe("State/province code (e.g. BC, CA)"),
21
+ country: z.string().optional().describe("Country code (default US)"),
22
+ numberType: z
23
+ .string()
24
+ .optional()
25
+ .describe("Number type: local or tollFree"),
26
+ }, async (args) => {
27
+ try {
28
+ return formatToolResponse(await client.call("search-phone-numbers", args));
29
+ }
30
+ catch (e) {
31
+ return formatError(e);
32
+ }
33
+ });
34
+ server.tool("provision_phone_number", "Purchase and provision a phone number found via search_phone_numbers", {
35
+ phone_number: z
36
+ .string()
37
+ .describe("Phone number to provision (E.164 format from search results)"),
38
+ }, async ({ phone_number }) => {
39
+ try {
40
+ return formatToolResponse(await client.call("provision-phone-number", { phone_number }));
41
+ }
42
+ catch (e) {
43
+ return formatError(e);
44
+ }
45
+ });
46
+ server.tool("release_phone_number", "Release (cancel) a provisioned phone number", {
47
+ phone_number: z.string().optional().describe("Phone number (E.164)"),
48
+ number_id: z.string().optional().describe("Phone number record UUID"),
49
+ }, async (args) => {
50
+ try {
51
+ return formatToolResponse(await client.call("release-phone-number", args));
52
+ }
53
+ catch (e) {
54
+ return formatError(e);
55
+ }
56
+ });
57
+ }
58
+ //# sourceMappingURL=numbers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numbers.js","sourceRoot":"","sources":["../../src/tools/numbers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { MagpipeClient } from "../client.js";
3
+ export declare function registerVoiceTools(server: McpServer, client: MagpipeClient): void;
@@ -0,0 +1,23 @@
1
+ import { z } from "zod";
2
+ import { formatToolResponse, formatError } from "../types.js";
3
+ export function registerVoiceTools(server, client) {
4
+ server.tool("list_voices", "List available ElevenLabs voices (both stock and cloned)", {}, async () => {
5
+ try {
6
+ return formatToolResponse(await client.call("list-voices"));
7
+ }
8
+ catch (e) {
9
+ return formatError(e);
10
+ }
11
+ });
12
+ server.tool("delete_voice", "Delete a cloned voice", {
13
+ voice_id: z.string().describe("Voice ID to delete"),
14
+ }, async ({ voice_id }) => {
15
+ try {
16
+ return formatToolResponse(await client.call("delete-voice", { voice_id }));
17
+ }
18
+ catch (e) {
19
+ return formatError(e);
20
+ }
21
+ });
22
+ }
23
+ //# sourceMappingURL=voices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voices.js","sourceRoot":"","sources":["../../src/tools/voices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,MAAqB;IACzE,MAAM,CAAC,IAAI,CACT,aAAa,EACb,0DAA0D,EAC1D,EAAE,EACF,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,OAAO,kBAAkB,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,cAAc,EACd,uBAAuB,EACvB;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;KACpD,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,OAAO,kBAAkB,CACvB,MAAM,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,CAAC,CAChD,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
2
+ export declare function formatToolResponse(data: unknown): CallToolResult;
3
+ export declare function formatError(err: unknown): CallToolResult;
package/dist/types.js ADDED
@@ -0,0 +1,12 @@
1
+ export function formatToolResponse(data) {
2
+ const text = typeof data === "string" ? data : JSON.stringify(data, null, 2);
3
+ return { content: [{ type: "text", text }] };
4
+ }
5
+ export function formatError(err) {
6
+ const message = err instanceof Error ? err.message : String(err);
7
+ return {
8
+ content: [{ type: "text", text: `Error: ${message}` }],
9
+ isError: true,
10
+ };
11
+ }
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC9C,MAAM,IAAI,GACR,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAClE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC;QACtD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "magpipe-mcp-server",
3
+ "version": "0.1.0",
4
+ "description": "MCP server for Magpipe — manage agents, calls, SMS, contacts, and phone numbers from AI coding tools",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "bin": {
8
+ "magpipe-mcp": "./dist/index.js"
9
+ },
10
+ "main": "./dist/index.js",
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "dev": "tsc --watch",
17
+ "start": "node dist/index.js"
18
+ },
19
+ "dependencies": {
20
+ "@modelcontextprotocol/sdk": "^1.12.1",
21
+ "zod": "^3.24.2"
22
+ },
23
+ "devDependencies": {
24
+ "typescript": "^5.7.3",
25
+ "@types/node": "^22.13.4"
26
+ },
27
+ "engines": {
28
+ "node": ">=18"
29
+ }
30
+ }