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.
- package/README.md +141 -0
- package/dist/client.d.ts +6 -0
- package/dist/client.js +43 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/agents.d.ts +3 -0
- package/dist/tools/agents.js +86 -0
- package/dist/tools/agents.js.map +1 -0
- package/dist/tools/api-keys.d.ts +3 -0
- package/dist/tools/api-keys.js +29 -0
- package/dist/tools/api-keys.js.map +1 -0
- package/dist/tools/calendar.d.ts +3 -0
- package/dist/tools/calendar.js +42 -0
- package/dist/tools/calendar.js.map +1 -0
- package/dist/tools/calls.d.ts +3 -0
- package/dist/tools/calls.js +68 -0
- package/dist/tools/calls.js.map +1 -0
- package/dist/tools/contacts.d.ts +3 -0
- package/dist/tools/contacts.js +71 -0
- package/dist/tools/contacts.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.js +23 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/knowledge.d.ts +3 -0
- package/dist/tools/knowledge.js +59 -0
- package/dist/tools/knowledge.js.map +1 -0
- package/dist/tools/messages.d.ts +3 -0
- package/dist/tools/messages.js +45 -0
- package/dist/tools/messages.js.map +1 -0
- package/dist/tools/misc.d.ts +3 -0
- package/dist/tools/misc.js +106 -0
- package/dist/tools/misc.js.map +1 -0
- package/dist/tools/numbers.d.ts +3 -0
- package/dist/tools/numbers.js +58 -0
- package/dist/tools/numbers.js.map +1 -0
- package/dist/tools/voices.d.ts +3 -0
- package/dist/tools/voices.js +23 -0
- package/dist/tools/voices.js.map +1 -0
- package/dist/types.d.ts +3 -0
- package/dist/types.js +12 -0
- package/dist/types.js.map +1 -0
- 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
|
package/dist/client.d.ts
ADDED
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"}
|
package/dist/index.d.ts
ADDED
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,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,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,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,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,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,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,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,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,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,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,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"}
|
package/dist/types.d.ts
ADDED
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
|
+
}
|