@inf-mcp/mcp-server 0.1.1 → 0.2.1
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 +17 -13
- package/dist/index.js +181 -60
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# @
|
|
1
|
+
# @inf-mcp/mcp-server
|
|
2
2
|
|
|
3
3
|
Connect AI coding assistants to the [Inflectiv](https://app.inflectiv.ai) platform. Create agents, manage knowledge, search your data, build skills from project memories, browse marketplaces, and chat — all from your IDE.
|
|
4
4
|
|
|
@@ -15,14 +15,14 @@ Connect AI coding assistants to the [Inflectiv](https://app.inflectiv.ai) platfo
|
|
|
15
15
|
### Claude Code (one command)
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
|
-
claude mcp add inflectiv -e INFLECTIV_API_KEY=inf_global_your_key_here -- npx -y @
|
|
18
|
+
claude mcp add inflectiv -e INFLECTIV_API_KEY=inf_global_your_key_here -- npx -y @inf-mcp/mcp-server
|
|
19
19
|
```
|
|
20
20
|
|
|
21
21
|
To update your key later:
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
24
|
claude mcp remove inflectiv
|
|
25
|
-
claude mcp add inflectiv -e INFLECTIV_API_KEY=inf_global_new_key -- npx -y @
|
|
25
|
+
claude mcp add inflectiv -e INFLECTIV_API_KEY=inf_global_new_key -- npx -y @inf-mcp/mcp-server
|
|
26
26
|
```
|
|
27
27
|
|
|
28
28
|
### Claude Desktop
|
|
@@ -34,7 +34,7 @@ Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS)
|
|
|
34
34
|
"mcpServers": {
|
|
35
35
|
"inflectiv": {
|
|
36
36
|
"command": "npx",
|
|
37
|
-
"args": ["-y", "@
|
|
37
|
+
"args": ["-y", "@inf-mcp/mcp-server"],
|
|
38
38
|
"env": {
|
|
39
39
|
"INFLECTIV_API_KEY": "inf_global_your_key_here"
|
|
40
40
|
}
|
|
@@ -61,7 +61,7 @@ Create `.vscode/mcp.json` in your project root:
|
|
|
61
61
|
"inflectiv": {
|
|
62
62
|
"type": "stdio",
|
|
63
63
|
"command": "npx",
|
|
64
|
-
"args": ["-y", "@
|
|
64
|
+
"args": ["-y", "@inf-mcp/mcp-server"],
|
|
65
65
|
"env": {
|
|
66
66
|
"INFLECTIV_API_KEY": "${input:inflectiv-api-key}"
|
|
67
67
|
}
|
|
@@ -78,7 +78,7 @@ Or hardcode the key (not recommended for shared repos):
|
|
|
78
78
|
"inflectiv": {
|
|
79
79
|
"type": "stdio",
|
|
80
80
|
"command": "npx",
|
|
81
|
-
"args": ["-y", "@
|
|
81
|
+
"args": ["-y", "@inf-mcp/mcp-server"],
|
|
82
82
|
"env": {
|
|
83
83
|
"INFLECTIV_API_KEY": "inf_global_your_key_here"
|
|
84
84
|
}
|
|
@@ -96,7 +96,7 @@ Create `.cursor/mcp.json` in your project root (or `~/.cursor/mcp.json` for glob
|
|
|
96
96
|
"mcpServers": {
|
|
97
97
|
"inflectiv": {
|
|
98
98
|
"command": "npx",
|
|
99
|
-
"args": ["-y", "@
|
|
99
|
+
"args": ["-y", "@inf-mcp/mcp-server"],
|
|
100
100
|
"env": {
|
|
101
101
|
"INFLECTIV_API_KEY": "inf_global_your_key_here"
|
|
102
102
|
}
|
|
@@ -114,7 +114,7 @@ Add to `~/.codeium/windsurf/mcp_config.json` (macOS/Linux) or `%APPDATA%\Codeium
|
|
|
114
114
|
"mcpServers": {
|
|
115
115
|
"inflectiv": {
|
|
116
116
|
"command": "npx",
|
|
117
|
-
"args": ["-y", "@
|
|
117
|
+
"args": ["-y", "@inf-mcp/mcp-server"],
|
|
118
118
|
"env": {
|
|
119
119
|
"INFLECTIV_API_KEY": "inf_global_your_key_here"
|
|
120
120
|
}
|
|
@@ -125,7 +125,7 @@ Add to `~/.codeium/windsurf/mcp_config.json` (macOS/Linux) or `%APPDATA%\Codeium
|
|
|
125
125
|
|
|
126
126
|
### Any Other MCP Client
|
|
127
127
|
|
|
128
|
-
Run `npx -y @
|
|
128
|
+
Run `npx -y @inf-mcp/mcp-server` with the `INFLECTIV_API_KEY` environment variable set. Works with any MCP-compatible client using stdio transport.
|
|
129
129
|
|
|
130
130
|
---
|
|
131
131
|
|
|
@@ -148,7 +148,7 @@ Run `npx -y @inflectiv/mcp-server` with the `INFLECTIV_API_KEY` environment vari
|
|
|
148
148
|
|
|
149
149
|
---
|
|
150
150
|
|
|
151
|
-
## Tools (
|
|
151
|
+
## Tools (40)
|
|
152
152
|
|
|
153
153
|
### Agents (8) — requires API key
|
|
154
154
|
|
|
@@ -215,7 +215,7 @@ Local-only tools. Memories are stored in `.inflectiv/memory/` in the project roo
|
|
|
215
215
|
| `inflectiv_delete_memory` | Delete a memory entry by ID | Free |
|
|
216
216
|
| `inflectiv_suggest_skill_creation` | Analyze memories and recommend if ready for skill creation | Free |
|
|
217
217
|
|
|
218
|
-
### Skills (
|
|
218
|
+
### Skills (6) — requires API key
|
|
219
219
|
|
|
220
220
|
| Tool | Description | Credits |
|
|
221
221
|
|------|-------------|---------|
|
|
@@ -223,6 +223,8 @@ Local-only tools. Memories are stored in `.inflectiv/memory/` in the project roo
|
|
|
223
223
|
| `inflectiv_apply_skill` | Apply a skill to an agent (injects into system prompt + RAG) | 2 |
|
|
224
224
|
| `inflectiv_list_skills` | List owned and acquired skills | Free |
|
|
225
225
|
| `inflectiv_scan_skill_security` | Preview security scan before creating (passes 1-4) | Free |
|
|
226
|
+
| `inflectiv_use_skill` | Load a skill into the current session (ephemeral for paid, persistable for free/owned) | Free |
|
|
227
|
+
| `inflectiv_install_skill` | Install a free/owned skill as a `.claude/commands/` slash command | Free |
|
|
226
228
|
|
|
227
229
|
### Marketplace (5) — browsing is public, acquiring requires API key
|
|
228
230
|
|
|
@@ -242,9 +244,9 @@ Local-only tools. Memories are stored in `.inflectiv/memory/` in the project roo
|
|
|
242
244
|
| Marketplace browsing | 4 | No |
|
|
243
245
|
| **Subtotal (no key)** | **9** | |
|
|
244
246
|
| Agents, Datasets, Files, Webhooks, Knowledge | 24 | Yes |
|
|
245
|
-
| Skills |
|
|
247
|
+
| Skills | 6 | Yes |
|
|
246
248
|
| Marketplace acquire | 1 | Yes |
|
|
247
|
-
| **Subtotal (key required)** | **
|
|
249
|
+
| **Subtotal (key required)** | **31** | |
|
|
248
250
|
|
|
249
251
|
---
|
|
250
252
|
|
|
@@ -269,6 +271,8 @@ Skills:
|
|
|
269
271
|
"Create a skill from my memories called 'React Patterns'"
|
|
270
272
|
"Apply skill 12 to agent 5"
|
|
271
273
|
"Scan this skill content for security issues"
|
|
274
|
+
"Use skill 12 in this session"
|
|
275
|
+
"Install skill 12 as a slash command"
|
|
272
276
|
|
|
273
277
|
Marketplace (browsing works without API key):
|
|
274
278
|
"Browse the skill marketplace for Python tools"
|
package/dist/index.js
CHANGED
|
@@ -26,17 +26,13 @@ var InflectivClient = class {
|
|
|
26
26
|
}
|
|
27
27
|
/** Returns the API path prefix based on environment:
|
|
28
28
|
* - Production (app.inflectiv.ai/api/platform): no prefix (proxy adds /ext/)
|
|
29
|
-
* - Railway
|
|
30
|
-
* - Localhost: /api/v2 prefix (direct API access)
|
|
29
|
+
* - All other environments (localhost, Railway, etc.): /api/v2 (direct API access)
|
|
31
30
|
*/
|
|
32
31
|
get pathPrefix() {
|
|
33
32
|
if (this.baseUrl.includes("app.inflectiv.ai")) {
|
|
34
33
|
return "";
|
|
35
34
|
}
|
|
36
|
-
|
|
37
|
-
return "/api/v2";
|
|
38
|
-
}
|
|
39
|
-
return "/api/platform";
|
|
35
|
+
return "/api/v2";
|
|
40
36
|
}
|
|
41
37
|
headers(extra) {
|
|
42
38
|
const h = {};
|
|
@@ -45,8 +41,8 @@ var InflectivClient = class {
|
|
|
45
41
|
}
|
|
46
42
|
return { ...h, ...extra };
|
|
47
43
|
}
|
|
48
|
-
async request(method,
|
|
49
|
-
const url = `${this.baseUrl}${
|
|
44
|
+
async request(method, path3, body) {
|
|
45
|
+
const url = `${this.baseUrl}${path3}`.replace(/\/+$/, "");
|
|
50
46
|
const init = {
|
|
51
47
|
method,
|
|
52
48
|
headers: this.headers(
|
|
@@ -66,29 +62,30 @@ var InflectivClient = class {
|
|
|
66
62
|
}
|
|
67
63
|
return res.json();
|
|
68
64
|
}
|
|
69
|
-
async get(
|
|
70
|
-
return this.request("GET",
|
|
65
|
+
async get(path3) {
|
|
66
|
+
return this.request("GET", path3);
|
|
71
67
|
}
|
|
72
|
-
async post(
|
|
73
|
-
return this.request("POST",
|
|
68
|
+
async post(path3, body) {
|
|
69
|
+
return this.request("POST", path3, body);
|
|
74
70
|
}
|
|
75
|
-
async put(
|
|
76
|
-
return this.request("PUT",
|
|
71
|
+
async put(path3, body) {
|
|
72
|
+
return this.request("PUT", path3, body);
|
|
77
73
|
}
|
|
78
|
-
async patch(
|
|
79
|
-
return this.request("PATCH",
|
|
74
|
+
async patch(path3, body) {
|
|
75
|
+
return this.request("PATCH", path3, body);
|
|
80
76
|
}
|
|
81
|
-
async delete(
|
|
82
|
-
return this.request("DELETE",
|
|
77
|
+
async delete(path3) {
|
|
78
|
+
return this.request("DELETE", path3);
|
|
83
79
|
}
|
|
84
|
-
async uploadFile(
|
|
80
|
+
async uploadFile(path3, fileBuffer, filename, title, dataset) {
|
|
85
81
|
const formData = new FormData();
|
|
86
82
|
const blob = new Blob([fileBuffer]);
|
|
87
83
|
formData.append("file", blob, filename);
|
|
88
84
|
if (title) {
|
|
89
85
|
formData.append("title", title);
|
|
90
86
|
}
|
|
91
|
-
const
|
|
87
|
+
const qs = dataset ? `?dataset=${encodeURIComponent(dataset)}` : "";
|
|
88
|
+
const url = `${this.baseUrl}${path3}${qs}`.replace(/\/+$/, "");
|
|
92
89
|
const res = await fetch(url, {
|
|
93
90
|
method: "POST",
|
|
94
91
|
headers: this.headers(),
|
|
@@ -140,7 +137,7 @@ ${issues}`;
|
|
|
140
137
|
function registerAgentTools(server, client) {
|
|
141
138
|
server.tool(
|
|
142
139
|
"inflectiv_list_agents",
|
|
143
|
-
"List all agents owned by you
|
|
140
|
+
"List all agents owned by you. With a global key: lists all agents. With a dataset key: lists agents with that dataset attached. Free.",
|
|
144
141
|
{},
|
|
145
142
|
async () => {
|
|
146
143
|
try {
|
|
@@ -165,11 +162,13 @@ function registerAgentTools(server, client) {
|
|
|
165
162
|
system_instructions: z.string().max(2e3).optional().describe("Custom system instructions for the agent"),
|
|
166
163
|
response_length: z.string().optional().describe('Response length preference (default: "concise")'),
|
|
167
164
|
model_name: z.string().optional().describe('LLM model name (default: "gpt-4o-mini")'),
|
|
168
|
-
temperature: z.number().int().min(0).max(100).optional().describe("Temperature 0-100 (default: 70)")
|
|
165
|
+
temperature: z.number().int().min(0).max(100).optional().describe("Temperature 0-100 (default: 70)"),
|
|
166
|
+
dataset: z.string().optional().describe("Dataset ID or api_name to attach (required for global API keys)")
|
|
169
167
|
},
|
|
170
|
-
async (
|
|
168
|
+
async ({ dataset, ...body }) => {
|
|
171
169
|
try {
|
|
172
|
-
const
|
|
170
|
+
const qs = dataset ? `?dataset=${dataset}` : "";
|
|
171
|
+
const data = await client.post(`${client.pathPrefix}/ext/agents/${qs}`, body);
|
|
173
172
|
return {
|
|
174
173
|
content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
|
|
175
174
|
};
|
|
@@ -318,10 +317,15 @@ function registerDatasetTools(server, client) {
|
|
|
318
317
|
server.tool(
|
|
319
318
|
"inflectiv_list_datasets",
|
|
320
319
|
"List datasets accessible via this API key. Free.",
|
|
321
|
-
{
|
|
322
|
-
|
|
320
|
+
{
|
|
321
|
+
dataset: z.string().optional().describe(
|
|
322
|
+
"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)"
|
|
323
|
+
)
|
|
324
|
+
},
|
|
325
|
+
async ({ dataset }) => {
|
|
323
326
|
try {
|
|
324
|
-
const
|
|
327
|
+
const qs = dataset ? `?dataset=${dataset}` : "";
|
|
328
|
+
const data = await client.get(`${client.pathPrefix}/ext/datasets/${qs}`);
|
|
325
329
|
return {
|
|
326
330
|
content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
|
|
327
331
|
};
|
|
@@ -334,12 +338,16 @@ function registerDatasetTools(server, client) {
|
|
|
334
338
|
"inflectiv_update_dataset",
|
|
335
339
|
"Update dataset name and/or description. Only dataset owner can update. Free.",
|
|
336
340
|
{
|
|
341
|
+
dataset: z.string().optional().describe(
|
|
342
|
+
"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)"
|
|
343
|
+
),
|
|
337
344
|
name: z.string().min(1).max(255).optional().describe("New dataset name"),
|
|
338
345
|
description: z.string().max(1e3).optional().describe("New dataset description")
|
|
339
346
|
},
|
|
340
|
-
async (params) => {
|
|
347
|
+
async ({ dataset, ...params }) => {
|
|
341
348
|
try {
|
|
342
|
-
const
|
|
349
|
+
const qs = dataset ? `?dataset=${dataset}` : "";
|
|
350
|
+
const data = await client.put(`${client.pathPrefix}/ext/datasets/${qs}`, params);
|
|
343
351
|
return {
|
|
344
352
|
content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
|
|
345
353
|
};
|
|
@@ -351,10 +359,15 @@ function registerDatasetTools(server, client) {
|
|
|
351
359
|
server.tool(
|
|
352
360
|
"inflectiv_reindex_dataset",
|
|
353
361
|
"Reindex dataset vectors. Useful after bulk changes. Costs 2 credits.",
|
|
354
|
-
{
|
|
355
|
-
|
|
362
|
+
{
|
|
363
|
+
dataset: z.string().optional().describe(
|
|
364
|
+
"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)"
|
|
365
|
+
)
|
|
366
|
+
},
|
|
367
|
+
async ({ dataset }) => {
|
|
356
368
|
try {
|
|
357
|
-
const
|
|
369
|
+
const qs = dataset ? `?dataset=${dataset}` : "";
|
|
370
|
+
const data = await client.post(`${client.pathPrefix}/ext/datasets/reindex${qs}`);
|
|
358
371
|
return {
|
|
359
372
|
content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
|
|
360
373
|
};
|
|
@@ -367,13 +380,17 @@ function registerDatasetTools(server, client) {
|
|
|
367
380
|
"inflectiv_search_dataset",
|
|
368
381
|
"Semantic search across the dataset's knowledge base. Costs 1 credit.",
|
|
369
382
|
{
|
|
383
|
+
dataset: z.string().optional().describe(
|
|
384
|
+
"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)"
|
|
385
|
+
),
|
|
370
386
|
query: z.string().min(1).max(2e3).describe("Search query"),
|
|
371
387
|
top_k: z.number().int().min(1).max(20).optional().describe("Number of results to return (default: 5)"),
|
|
372
388
|
score_threshold: z.number().min(0).max(1).optional().describe("Minimum similarity score 0.0-1.0 (default: 0.6)")
|
|
373
389
|
},
|
|
374
|
-
async (params) => {
|
|
390
|
+
async ({ dataset, ...params }) => {
|
|
375
391
|
try {
|
|
376
|
-
const
|
|
392
|
+
const qs = dataset ? `?dataset=${dataset}` : "";
|
|
393
|
+
const data = await client.post(`${client.pathPrefix}/ext/datasets/query${qs}`, params);
|
|
377
394
|
return {
|
|
378
395
|
content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
|
|
379
396
|
};
|
|
@@ -386,14 +403,18 @@ function registerDatasetTools(server, client) {
|
|
|
386
403
|
"inflectiv_batch_search",
|
|
387
404
|
"Run multiple semantic searches in a single call. Costs 1 credit per query.",
|
|
388
405
|
{
|
|
406
|
+
dataset: z.string().optional().describe(
|
|
407
|
+
"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)"
|
|
408
|
+
),
|
|
389
409
|
queries: z.array(z.string()).min(1).max(20).describe("List of search queries (1-20)"),
|
|
390
410
|
top_k: z.number().int().min(1).max(20).optional().describe("Number of results per query (default: 5)"),
|
|
391
411
|
score_threshold: z.number().min(0).max(1).optional().describe("Minimum similarity score 0.0-1.0 (default: 0.6)")
|
|
392
412
|
},
|
|
393
|
-
async (params) => {
|
|
413
|
+
async ({ dataset, ...params }) => {
|
|
394
414
|
try {
|
|
415
|
+
const qs = dataset ? `?dataset=${dataset}` : "";
|
|
395
416
|
const data = await client.post(
|
|
396
|
-
`${client.pathPrefix}/ext/datasets/query/batch`,
|
|
417
|
+
`${client.pathPrefix}/ext/datasets/query/batch${qs}`,
|
|
397
418
|
params
|
|
398
419
|
);
|
|
399
420
|
return {
|
|
@@ -408,16 +429,20 @@ function registerDatasetTools(server, client) {
|
|
|
408
429
|
"inflectiv_write_intelligence",
|
|
409
430
|
"Write a single intelligence entry to the dataset. Costs 1 credit (0 if duplicate detected). Content is embedded and becomes searchable.",
|
|
410
431
|
{
|
|
432
|
+
dataset: z.string().optional().describe(
|
|
433
|
+
"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)"
|
|
434
|
+
),
|
|
411
435
|
agent_id: z.number().int().describe("Agent ID that owns this intelligence"),
|
|
412
436
|
content: z.string().min(1).max(5e4).describe("Intelligence content text"),
|
|
413
437
|
title: z.string().max(255).optional().describe("Title for the intelligence entry"),
|
|
414
438
|
source_type: z.enum(["agent_text", "agent_url"]).optional().describe('Source type (default: "agent_text")'),
|
|
415
439
|
source_identifier: z.string().max(2e3).optional().describe("Source identifier (e.g. URL)")
|
|
416
440
|
},
|
|
417
|
-
async ({ agent_id, ...body }) => {
|
|
441
|
+
async ({ agent_id, dataset, ...body }) => {
|
|
418
442
|
try {
|
|
443
|
+
const datasetQs = dataset ? `&dataset=${dataset}` : "";
|
|
419
444
|
const data = await client.post(
|
|
420
|
-
`${client.pathPrefix}/ext/datasets/intelligence?agent_id=${agent_id}`,
|
|
445
|
+
`${client.pathPrefix}/ext/datasets/intelligence?agent_id=${agent_id}${datasetQs}`,
|
|
421
446
|
body
|
|
422
447
|
);
|
|
423
448
|
return {
|
|
@@ -432,6 +457,9 @@ function registerDatasetTools(server, client) {
|
|
|
432
457
|
"inflectiv_batch_write_intelligence",
|
|
433
458
|
"Write multiple intelligence entries in a single call. Costs 1 credit per new entry (duplicates are free). Max 50 entries.",
|
|
434
459
|
{
|
|
460
|
+
dataset: z.string().optional().describe(
|
|
461
|
+
"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)"
|
|
462
|
+
),
|
|
435
463
|
agent_id: z.number().int().describe("Agent ID that owns these intelligence entries"),
|
|
436
464
|
entries: z.array(
|
|
437
465
|
z.object({
|
|
@@ -442,10 +470,11 @@ function registerDatasetTools(server, client) {
|
|
|
442
470
|
})
|
|
443
471
|
).min(1).max(50).describe("Intelligence entries to write (1-50)")
|
|
444
472
|
},
|
|
445
|
-
async ({ agent_id, entries }) => {
|
|
473
|
+
async ({ agent_id, dataset, entries }) => {
|
|
446
474
|
try {
|
|
475
|
+
const datasetQs = dataset ? `&dataset=${dataset}` : "";
|
|
447
476
|
const data = await client.post(
|
|
448
|
-
`${client.pathPrefix}/ext/datasets/intelligence/batch?agent_id=${agent_id}`,
|
|
477
|
+
`${client.pathPrefix}/ext/datasets/intelligence/batch?agent_id=${agent_id}${datasetQs}`,
|
|
449
478
|
{ entries }
|
|
450
479
|
);
|
|
451
480
|
return {
|
|
@@ -460,21 +489,25 @@ function registerDatasetTools(server, client) {
|
|
|
460
489
|
"inflectiv_list_intelligence",
|
|
461
490
|
"List intelligence entries in the dataset. Free. Filter by agent_id, status, with pagination.",
|
|
462
491
|
{
|
|
492
|
+
dataset: z.string().optional().describe(
|
|
493
|
+
"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)"
|
|
494
|
+
),
|
|
463
495
|
agent_id: z.number().int().optional().describe("Filter by agent ID"),
|
|
464
496
|
status: z.enum(["processing", "processed", "failed"]).optional().describe("Filter by processing status"),
|
|
465
497
|
limit: z.number().int().min(1).max(100).optional().describe("Number of entries to return (default: 50)"),
|
|
466
498
|
offset: z.number().int().min(0).optional().describe("Offset for pagination (default: 0)")
|
|
467
499
|
},
|
|
468
|
-
async ({ agent_id, status, limit, offset }) => {
|
|
500
|
+
async ({ dataset, agent_id, status, limit, offset }) => {
|
|
469
501
|
try {
|
|
470
502
|
const params = new URLSearchParams();
|
|
503
|
+
if (dataset) params.set("dataset", dataset);
|
|
471
504
|
if (agent_id !== void 0) params.set("agent_id", String(agent_id));
|
|
472
505
|
if (status) params.set("status", status);
|
|
473
506
|
if (limit !== void 0) params.set("limit", String(limit));
|
|
474
507
|
if (offset !== void 0) params.set("offset", String(offset));
|
|
475
508
|
const qs = params.toString();
|
|
476
|
-
const
|
|
477
|
-
const data = await client.get(
|
|
509
|
+
const path3 = `${client.pathPrefix}/ext/datasets/intelligence${qs ? `?${qs}` : ""}`;
|
|
510
|
+
const data = await client.get(path3);
|
|
478
511
|
return {
|
|
479
512
|
content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
|
|
480
513
|
};
|
|
@@ -505,16 +538,18 @@ function registerFileTools(server, client) {
|
|
|
505
538
|
"List files (knowledge sources) in the dataset. Free.",
|
|
506
539
|
{
|
|
507
540
|
skip: z.number().int().min(0).optional().describe("Number of files to skip (default: 0)"),
|
|
508
|
-
limit: z.number().int().min(1).max(100).optional().describe("Number of files to return (default: 50)")
|
|
541
|
+
limit: z.number().int().min(1).max(100).optional().describe("Number of files to return (default: 50)"),
|
|
542
|
+
dataset: z.string().optional().describe("Dataset ID or api_name (required for global API keys)")
|
|
509
543
|
},
|
|
510
|
-
async ({ skip, limit }) => {
|
|
544
|
+
async ({ skip, limit, dataset }) => {
|
|
511
545
|
try {
|
|
512
546
|
const params = new URLSearchParams();
|
|
513
547
|
if (skip !== void 0) params.set("skip", String(skip));
|
|
514
548
|
if (limit !== void 0) params.set("limit", String(limit));
|
|
549
|
+
if (dataset) params.set("dataset", dataset);
|
|
515
550
|
const qs = params.toString();
|
|
516
|
-
const
|
|
517
|
-
const data = await client.get(
|
|
551
|
+
const path3 = `${client.pathPrefix}/ext/files/${qs ? `?${qs}` : ""}`;
|
|
552
|
+
const data = await client.get(path3);
|
|
518
553
|
return {
|
|
519
554
|
content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
|
|
520
555
|
};
|
|
@@ -545,9 +580,10 @@ function registerFileTools(server, client) {
|
|
|
545
580
|
`Upload a local file to the dataset as a knowledge source. Costs 5 credits base + 1/MB over 5MB. Supported formats: ${SUPPORTED_EXTENSIONS.join(", ")}`,
|
|
546
581
|
{
|
|
547
582
|
file_path: z.string().describe("Absolute path to the local file to upload"),
|
|
548
|
-
title: z.string().max(255).optional().describe("Display title for the file")
|
|
583
|
+
title: z.string().max(255).optional().describe("Display title for the file"),
|
|
584
|
+
dataset: z.string().optional().describe("Dataset ID or api_name (required for global API keys)")
|
|
549
585
|
},
|
|
550
|
-
async ({ file_path, title }) => {
|
|
586
|
+
async ({ file_path, title, dataset }) => {
|
|
551
587
|
try {
|
|
552
588
|
const ext = "." + file_path.split(".").pop()?.toLowerCase();
|
|
553
589
|
if (!SUPPORTED_EXTENSIONS.includes(ext)) {
|
|
@@ -567,7 +603,8 @@ function registerFileTools(server, client) {
|
|
|
567
603
|
`${client.pathPrefix}/ext/files/upload`,
|
|
568
604
|
fileBuffer,
|
|
569
605
|
filename,
|
|
570
|
-
title
|
|
606
|
+
title,
|
|
607
|
+
dataset
|
|
571
608
|
);
|
|
572
609
|
return {
|
|
573
610
|
content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
|
|
@@ -611,18 +648,20 @@ function registerKnowledgeSourceTools(server, client) {
|
|
|
611
648
|
]).optional().describe("Filter by source type"),
|
|
612
649
|
status: z.enum(["processing", "processed", "failed"]).optional().describe("Filter by processing status"),
|
|
613
650
|
skip: z.number().int().min(0).optional().describe("Number of items to skip (default: 0)"),
|
|
614
|
-
limit: z.number().int().min(1).max(100).optional().describe("Number of items to return (default: 50)")
|
|
651
|
+
limit: z.number().int().min(1).max(100).optional().describe("Number of items to return (default: 50)"),
|
|
652
|
+
dataset: z.string().optional().describe("Dataset ID or api_name (required for global API keys)")
|
|
615
653
|
},
|
|
616
|
-
async ({ source_type, status, skip, limit }) => {
|
|
654
|
+
async ({ source_type, status, skip, limit, dataset }) => {
|
|
617
655
|
try {
|
|
618
656
|
const params = new URLSearchParams();
|
|
619
657
|
if (source_type) params.set("source_type", source_type);
|
|
620
658
|
if (status) params.set("status", status);
|
|
621
659
|
if (skip !== void 0) params.set("skip", String(skip));
|
|
622
660
|
if (limit !== void 0) params.set("limit", String(limit));
|
|
661
|
+
if (dataset) params.set("dataset", dataset);
|
|
623
662
|
const qs = params.toString();
|
|
624
|
-
const
|
|
625
|
-
const data = await client.get(
|
|
663
|
+
const path3 = `${client.pathPrefix}/ext/knowledge-sources/${qs ? `?${qs}` : ""}`;
|
|
664
|
+
const data = await client.get(path3);
|
|
626
665
|
return {
|
|
627
666
|
content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
|
|
628
667
|
};
|
|
@@ -656,8 +695,8 @@ function registerMarketplaceTools(server, client) {
|
|
|
656
695
|
if (params.skip !== void 0) searchParams.set("skip", String(params.skip));
|
|
657
696
|
if (params.limit !== void 0) searchParams.set("limit", String(params.limit));
|
|
658
697
|
const qs = searchParams.toString();
|
|
659
|
-
const
|
|
660
|
-
const data = await client.get(
|
|
698
|
+
const path3 = `${client.pathPrefix}/skill-marketplace/listings${qs ? `?${qs}` : ""}`;
|
|
699
|
+
const data = await client.get(path3);
|
|
661
700
|
return {
|
|
662
701
|
content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
|
|
663
702
|
};
|
|
@@ -723,8 +762,8 @@ function registerMarketplaceTools(server, client) {
|
|
|
723
762
|
if (params.skip !== void 0) searchParams.set("skip", String(params.skip));
|
|
724
763
|
if (params.limit !== void 0) searchParams.set("limit", String(params.limit));
|
|
725
764
|
const qs = searchParams.toString();
|
|
726
|
-
const
|
|
727
|
-
const data = await client.get(
|
|
765
|
+
const path3 = `${client.pathPrefix}/marketplace/listings${qs ? `?${qs}` : ""}`;
|
|
766
|
+
const data = await client.get(path3);
|
|
728
767
|
return {
|
|
729
768
|
content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
|
|
730
769
|
};
|
|
@@ -754,8 +793,8 @@ function registerMarketplaceTools(server, client) {
|
|
|
754
793
|
if (params.skip !== void 0) searchParams.set("skip", String(params.skip));
|
|
755
794
|
if (params.limit !== void 0) searchParams.set("limit", String(params.limit));
|
|
756
795
|
const qs = searchParams.toString();
|
|
757
|
-
const
|
|
758
|
-
const data = await client.get(
|
|
796
|
+
const path3 = `${client.pathPrefix}/agent-marketplace/listings${qs ? `?${qs}` : ""}`;
|
|
797
|
+
const data = await client.get(path3);
|
|
759
798
|
return {
|
|
760
799
|
content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
|
|
761
800
|
};
|
|
@@ -856,6 +895,9 @@ var MemoryStore = class {
|
|
|
856
895
|
this.projectRoot = findProjectRoot(startDir);
|
|
857
896
|
this.config = ensureProjectStructure(this.projectRoot);
|
|
858
897
|
}
|
|
898
|
+
get root() {
|
|
899
|
+
return this.projectRoot;
|
|
900
|
+
}
|
|
859
901
|
get projectName() {
|
|
860
902
|
return this.config.project_name;
|
|
861
903
|
}
|
|
@@ -1164,6 +1206,85 @@ function registerSkillTools(server, client) {
|
|
|
1164
1206
|
}
|
|
1165
1207
|
}
|
|
1166
1208
|
);
|
|
1209
|
+
server.tool(
|
|
1210
|
+
"inflectiv_use_skill",
|
|
1211
|
+
"Load a skill's content into the current Claude Code session. For free/owned skills, content can also be installed permanently. For paid acquired skills, content is loaded ephemerally (session-only, not saved to disk). Free \u2014 no credits.",
|
|
1212
|
+
{
|
|
1213
|
+
skill_id: z.number().describe("Skill ID to use")
|
|
1214
|
+
},
|
|
1215
|
+
async (params) => {
|
|
1216
|
+
try {
|
|
1217
|
+
const data = await client.get(`${client.pathPrefix}/ext/skills/${params.skill_id}/use`);
|
|
1218
|
+
let instructions = `# Skill: ${data.name}
|
|
1219
|
+
|
|
1220
|
+
${data.content}`;
|
|
1221
|
+
if (!data.can_persist) {
|
|
1222
|
+
instructions += "\n\n---\n_This is a paid skill. Content is for this session only and must not be saved to disk or redistributed._";
|
|
1223
|
+
} else {
|
|
1224
|
+
instructions += `
|
|
1225
|
+
|
|
1226
|
+
---
|
|
1227
|
+
_This skill can be permanently installed using \`inflectiv_install_skill\` (skill_id: ${params.skill_id})._`;
|
|
1228
|
+
}
|
|
1229
|
+
return {
|
|
1230
|
+
content: [{ type: "text", text: instructions }]
|
|
1231
|
+
};
|
|
1232
|
+
} catch (err) {
|
|
1233
|
+
return formatError(err);
|
|
1234
|
+
}
|
|
1235
|
+
}
|
|
1236
|
+
);
|
|
1237
|
+
server.tool(
|
|
1238
|
+
"inflectiv_install_skill",
|
|
1239
|
+
"Install a skill as a Claude Code slash command (.claude/commands/<name>.md). Only works for owned or free acquired skills \u2014 paid skills cannot be installed locally to protect creator IP. Free \u2014 no credits.",
|
|
1240
|
+
{
|
|
1241
|
+
skill_id: z.number().describe("Skill ID to install"),
|
|
1242
|
+
command_name: z.string().max(50).optional().describe("Custom slash command name (default: skill name slugified)")
|
|
1243
|
+
},
|
|
1244
|
+
async (params) => {
|
|
1245
|
+
try {
|
|
1246
|
+
const data = await client.get(`${client.pathPrefix}/ext/skills/${params.skill_id}/use`);
|
|
1247
|
+
if (!data.can_persist) {
|
|
1248
|
+
return {
|
|
1249
|
+
content: [
|
|
1250
|
+
{
|
|
1251
|
+
type: "text",
|
|
1252
|
+
text: "Cannot install this skill locally \u2014 it is a paid acquired skill. Use `inflectiv_use_skill` to load it ephemerally for this session instead."
|
|
1253
|
+
}
|
|
1254
|
+
]
|
|
1255
|
+
};
|
|
1256
|
+
}
|
|
1257
|
+
const cmdName = params.command_name || data.name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
|
|
1258
|
+
let projectRoot;
|
|
1259
|
+
try {
|
|
1260
|
+
const store2 = new MemoryStore();
|
|
1261
|
+
projectRoot = store2.root;
|
|
1262
|
+
} catch {
|
|
1263
|
+
projectRoot = process.cwd();
|
|
1264
|
+
}
|
|
1265
|
+
const commandsDir = path.join(projectRoot, ".claude", "commands");
|
|
1266
|
+
if (!fs2.existsSync(commandsDir)) {
|
|
1267
|
+
fs2.mkdirSync(commandsDir, { recursive: true });
|
|
1268
|
+
}
|
|
1269
|
+
const filePath = path.join(commandsDir, `${cmdName}.md`);
|
|
1270
|
+
fs2.writeFileSync(filePath, data.content);
|
|
1271
|
+
return {
|
|
1272
|
+
content: [
|
|
1273
|
+
{
|
|
1274
|
+
type: "text",
|
|
1275
|
+
text: `Skill installed as Claude Code command: /${cmdName}
|
|
1276
|
+
|
|
1277
|
+
File: ${filePath}
|
|
1278
|
+
|
|
1279
|
+
You can now use /${cmdName} in any Claude Code session in this project.`
|
|
1280
|
+
}
|
|
1281
|
+
]
|
|
1282
|
+
};
|
|
1283
|
+
} catch (err) {
|
|
1284
|
+
return formatError(err);
|
|
1285
|
+
}
|
|
1286
|
+
}
|
|
1287
|
+
);
|
|
1167
1288
|
}
|
|
1168
1289
|
var VALID_EVENTS = [
|
|
1169
1290
|
"intelligence.processed",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client.ts","../src/errors.ts","../src/tools/agents.ts","../src/tools/datasets.ts","../src/tools/files.ts","../src/tools/knowledge-sources.ts","../src/tools/marketplace.ts","../src/memory/project-context.ts","../src/memory/memory-store.ts","../src/tools/skills.ts","../src/tools/webhooks.ts","../src/memory/types.ts","../src/tools/memory.ts","../src/resources/api-docs.ts","../src/server.ts","../src/index.ts"],"names":["path","z","fs","store"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from \"zod\";\n\nconst ApiKeySchema = z\n .string()\n .startsWith(\"inf_\", \"API key must start with 'inf_'\");\n\nexport class InflectivApiError extends Error {\n constructor(\n public status: number,\n public body: unknown,\n ) {\n const msg =\n typeof body === \"object\" && body !== null && \"detail\" in body\n ? String((body as { detail: unknown }).detail)\n : JSON.stringify(body);\n super(`HTTP ${status}: ${msg}`);\n this.name = \"InflectivApiError\";\n }\n}\n\nexport class InflectivClient {\n private apiKey: string | null;\n private baseUrl: string;\n\n constructor(apiKey: string | null, baseUrl?: string) {\n this.apiKey = apiKey ? ApiKeySchema.parse(apiKey) : null;\n this.baseUrl = (\n baseUrl ?? \"https://app.inflectiv.ai/api/platform\"\n ).replace(/\\/$/, \"\");\n }\n\n /** Returns the API path prefix based on environment:\n * - Production (app.inflectiv.ai/api/platform): no prefix (proxy adds /ext/)\n * - Railway dev: /api/platform prefix (Next.js proxy)\n * - Localhost: /api/v2 prefix (direct API access)\n */\n get pathPrefix(): string {\n if (this.baseUrl.includes(\"app.inflectiv.ai\")) {\n return \"\";\n }\n if (this.baseUrl.includes(\"localhost\") || this.baseUrl.includes(\"127.0.0.1\")) {\n return \"/api/v2\";\n }\n return \"/api/platform\";\n }\n\n private headers(extra?: Record<string, string>): Record<string, string> {\n const h: Record<string, string> = {};\n if (this.apiKey) {\n h[\"X-API-Key\"] = this.apiKey;\n }\n return { ...h, ...extra };\n }\n\n private async request<T>(\n method: string,\n path: string,\n body?: unknown,\n ): Promise<T> {\n const url = `${this.baseUrl}${path}`.replace(/\\/+$/, \"\");\n const init: RequestInit = {\n method,\n headers: this.headers(\n body !== undefined ? { \"Content-Type\": \"application/json\" } : undefined,\n ),\n body: body !== undefined ? JSON.stringify(body) : undefined,\n };\n\n const res = await fetch(url, init);\n\n if (!res.ok) {\n let errorBody: unknown;\n try {\n errorBody = await res.json();\n } catch {\n errorBody = await res.text();\n }\n throw new InflectivApiError(res.status, errorBody);\n }\n\n return res.json() as Promise<T>;\n }\n\n async get<T>(path: string): Promise<T> {\n return this.request<T>(\"GET\", path);\n }\n\n async post<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(\"POST\", path, body);\n }\n\n async put<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(\"PUT\", path, body);\n }\n\n async patch<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(\"PATCH\", path, body);\n }\n\n async delete<T>(path: string): Promise<T> {\n return this.request<T>(\"DELETE\", path);\n }\n\n async uploadFile(\n path: string,\n fileBuffer: Buffer,\n filename: string,\n title?: string,\n ): Promise<unknown> {\n const formData = new FormData();\n const blob = new Blob([fileBuffer]);\n formData.append(\"file\", blob, filename);\n if (title) {\n formData.append(\"title\", title);\n }\n\n const url = `${this.baseUrl}${path}`.replace(/\\/+$/, \"\");\n const res = await fetch(url, {\n method: \"POST\",\n headers: this.headers(),\n body: formData,\n });\n\n if (!res.ok) {\n let errorBody: unknown;\n try {\n errorBody = await res.json();\n } catch {\n errorBody = await res.text();\n }\n throw new InflectivApiError(res.status, errorBody);\n }\n\n return res.json();\n }\n}\n","import { ZodError } from \"zod\";\nimport { InflectivApiError } from \"./client.js\";\n\nexport function formatError(err: unknown): {\n content: { type: \"text\"; text: string }[];\n isError: true;\n} {\n let message: string;\n\n if (err instanceof InflectivApiError) {\n const body = err.body;\n let detail = err.message;\n\n if (typeof body === \"object\" && body !== null) {\n const b = body as Record<string, unknown>;\n if (b.detail) detail = String(b.detail);\n if (b.credits_required) {\n detail += `\\n\\nInsufficient credits. Required: ${b.credits_required}, Available: ${b.credits_available ?? \"unknown\"}. Top up at https://app.inflectiv.ai`;\n }\n }\n\n message = `Inflectiv API Error (${err.status}): ${detail}`;\n } else if (err instanceof ZodError) {\n const issues = err.issues\n .map((i) => ` - ${i.path.join(\".\")}: ${i.message}`)\n .join(\"\\n\");\n message = `Validation Error:\\n${issues}`;\n } else if (err instanceof Error) {\n message = err.message.includes(\"fetch failed\")\n ? `Network error: Could not reach Inflectiv API. Check your INFLECTIV_BASE_URL and network connection.`\n : `Error: ${err.message}`;\n } else {\n message = `Unknown error: ${String(err)}`;\n }\n\n return {\n content: [{ type: \"text\", text: message }],\n isError: true,\n };\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\n\nexport function registerAgentTools(server: McpServer, client: InflectivClient) {\n server.tool(\n \"inflectiv_list_agents\",\n \"List all agents owned by you that have the API key's dataset attached. Free.\",\n {},\n async () => {\n try {\n const data = await client.get(`${client.pathPrefix}/ext/agents/`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_create_agent\",\n \"Create a new AI agent attached to the API key's dataset. Costs 5 credits.\",\n {\n name: z.string().min(1).max(255).describe(\"Agent name\"),\n description: z\n .string()\n .max(1000)\n .optional()\n .describe(\"Agent description\"),\n personality: z\n .string()\n .optional()\n .describe(\n 'Agent personality style (default: \"professional\")',\n ),\n system_instructions: z\n .string()\n .max(2000)\n .optional()\n .describe(\"Custom system instructions for the agent\"),\n response_length: z\n .string()\n .optional()\n .describe('Response length preference (default: \"concise\")'),\n model_name: z\n .string()\n .optional()\n .describe('LLM model name (default: \"gpt-4o-mini\")'),\n temperature: z\n .number()\n .int()\n .min(0)\n .max(100)\n .optional()\n .describe(\"Temperature 0-100 (default: 70)\"),\n },\n async (params) => {\n try {\n const data = await client.post(`${client.pathPrefix}/ext/agents/`, params);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_get_agent\",\n \"Get details of a specific agent. Free.\",\n {\n agent_id: z.number().int().describe(\"Agent ID\"),\n },\n async ({ agent_id }) => {\n try {\n const data = await client.get(`${client.pathPrefix}/ext/agents/${agent_id}`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_update_agent_config\",\n \"Update an agent's configuration (personality, instructions, model, temperature, etc.). Costs 2 credits.\",\n {\n agent_id: z.number().int().describe(\"Agent ID\"),\n name: z.string().min(1).max(255).optional().describe(\"Agent name\"),\n description: z\n .string()\n .max(1000)\n .optional()\n .describe(\"Agent description\"),\n personality: z.string().optional().describe(\"Agent personality style\"),\n system_instructions: z\n .string()\n .max(2000)\n .optional()\n .describe(\"Custom system instructions\"),\n response_length: z\n .string()\n .optional()\n .describe(\"Response length preference\"),\n model_name: z.string().optional().describe(\"LLM model name\"),\n temperature: z\n .number()\n .int()\n .min(0)\n .max(100)\n .optional()\n .describe(\"Temperature 0-100\"),\n },\n async ({ agent_id, ...body }) => {\n try {\n const data = await client.put(\n `${client.pathPrefix}/ext/agents/${agent_id}/config`,\n body,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_chat_with_agent\",\n 'Send a message to an agent and get a RAG-enabled response. Costs 1 credit. Provide conversation_history as an array of {role, content} objects for multi-turn chat.',\n {\n agent_id: z.number().int().describe(\"Agent ID\"),\n message: z.string().min(1).max(4000).describe(\"Message to send\"),\n conversation_history: z\n .array(\n z.object({\n role: z.string().describe('Message role (e.g. \"user\", \"assistant\")'),\n content: z.string().describe(\"Message content\"),\n }),\n )\n .optional()\n .describe(\"Previous conversation messages for context\"),\n },\n async ({ agent_id, message, conversation_history }) => {\n try {\n const data = await client.post(`${client.pathPrefix}/ext/agents/${agent_id}/chat`, {\n message,\n conversation_history: conversation_history ?? [],\n });\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_list_agent_datasets\",\n \"List all datasets attached to an agent. Free.\",\n {\n agent_id: z.number().int().describe(\"Agent ID\"),\n },\n async ({ agent_id }) => {\n try {\n const data = await client.get(`${client.pathPrefix}/ext/agents/${agent_id}/datasets`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_attach_dataset\",\n 'Attach a dataset to an agent. Free. Mode can be \"read_only\" or \"self_learning\".',\n {\n agent_id: z.number().int().describe(\"Agent ID\"),\n dataset_id: z.number().int().describe(\"Dataset ID to attach\"),\n mode: z\n .enum([\"read_only\", \"self_learning\"])\n .optional()\n .describe('Dataset mode (default: \"read_only\")'),\n },\n async ({ agent_id, dataset_id, mode }) => {\n try {\n const data = await client.post(\n `${client.pathPrefix}/ext/agents/${agent_id}/datasets`,\n {\n dataset_id,\n mode: mode ?? \"read_only\",\n },\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_update_dataset_mode\",\n 'Update the mode of a dataset attached to an agent. Mode: \"read_only\" or \"self_learning\". Free.',\n {\n agent_id: z.number().int().describe(\"Agent ID\"),\n dataset_id: z.number().int().describe(\"Dataset ID\"),\n mode: z\n .enum([\"read_only\", \"self_learning\"])\n .describe(\"New dataset mode\"),\n },\n async ({ agent_id, dataset_id, mode }) => {\n try {\n const data = await client.patch(\n `${client.pathPrefix}/ext/agents/${agent_id}/datasets/${dataset_id}`,\n { mode },\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\n\nexport function registerDatasetTools(\n server: McpServer,\n client: InflectivClient,\n) {\n server.tool(\n \"inflectiv_list_datasets\",\n \"List datasets accessible via this API key. Free.\",\n {},\n async () => {\n try {\n const data = await client.get(`${client.pathPrefix}/ext/datasets/`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_update_dataset\",\n \"Update dataset name and/or description. Only dataset owner can update. Free.\",\n {\n name: z\n .string()\n .min(1)\n .max(255)\n .optional()\n .describe(\"New dataset name\"),\n description: z\n .string()\n .max(1000)\n .optional()\n .describe(\"New dataset description\"),\n },\n async (params) => {\n try {\n const data = await client.put(`${client.pathPrefix}/ext/datasets/`, params);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_reindex_dataset\",\n \"Reindex dataset vectors. Useful after bulk changes. Costs 2 credits.\",\n {},\n async () => {\n try {\n const data = await client.post(`${client.pathPrefix}/ext/datasets/reindex`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_search_dataset\",\n \"Semantic search across the dataset's knowledge base. Costs 1 credit.\",\n {\n query: z.string().min(1).max(2000).describe(\"Search query\"),\n top_k: z\n .number()\n .int()\n .min(1)\n .max(20)\n .optional()\n .describe(\"Number of results to return (default: 5)\"),\n score_threshold: z\n .number()\n .min(0)\n .max(1)\n .optional()\n .describe(\"Minimum similarity score 0.0-1.0 (default: 0.6)\"),\n },\n async (params) => {\n try {\n const data = await client.post(`${client.pathPrefix}/ext/datasets/query`, params);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_batch_search\",\n \"Run multiple semantic searches in a single call. Costs 1 credit per query.\",\n {\n queries: z\n .array(z.string())\n .min(1)\n .max(20)\n .describe(\"List of search queries (1-20)\"),\n top_k: z\n .number()\n .int()\n .min(1)\n .max(20)\n .optional()\n .describe(\"Number of results per query (default: 5)\"),\n score_threshold: z\n .number()\n .min(0)\n .max(1)\n .optional()\n .describe(\"Minimum similarity score 0.0-1.0 (default: 0.6)\"),\n },\n async (params) => {\n try {\n const data = await client.post(\n `${client.pathPrefix}/ext/datasets/query/batch`,\n params,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_write_intelligence\",\n \"Write a single intelligence entry to the dataset. Costs 1 credit (0 if duplicate detected). Content is embedded and becomes searchable.\",\n {\n agent_id: z\n .number()\n .int()\n .describe(\"Agent ID that owns this intelligence\"),\n content: z\n .string()\n .min(1)\n .max(50000)\n .describe(\"Intelligence content text\"),\n title: z\n .string()\n .max(255)\n .optional()\n .describe(\"Title for the intelligence entry\"),\n source_type: z\n .enum([\"agent_text\", \"agent_url\"])\n .optional()\n .describe('Source type (default: \"agent_text\")'),\n source_identifier: z\n .string()\n .max(2000)\n .optional()\n .describe(\"Source identifier (e.g. URL)\"),\n },\n async ({ agent_id, ...body }) => {\n try {\n const data = await client.post(\n `${client.pathPrefix}/ext/datasets/intelligence?agent_id=${agent_id}`,\n body,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_batch_write_intelligence\",\n \"Write multiple intelligence entries in a single call. Costs 1 credit per new entry (duplicates are free). Max 50 entries.\",\n {\n agent_id: z\n .number()\n .int()\n .describe(\"Agent ID that owns these intelligence entries\"),\n entries: z\n .array(\n z.object({\n content: z\n .string()\n .min(1)\n .max(50000)\n .describe(\"Intelligence content text\"),\n title: z.string().max(255).optional().describe(\"Entry title\"),\n source_type: z\n .enum([\"agent_text\", \"agent_url\"])\n .optional()\n .describe('Source type (default: \"agent_text\")'),\n source_identifier: z\n .string()\n .max(2000)\n .optional()\n .describe(\"Source identifier\"),\n }),\n )\n .min(1)\n .max(50)\n .describe(\"Intelligence entries to write (1-50)\"),\n },\n async ({ agent_id, entries }) => {\n try {\n const data = await client.post(\n `${client.pathPrefix}/ext/datasets/intelligence/batch?agent_id=${agent_id}`,\n { entries },\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_list_intelligence\",\n \"List intelligence entries in the dataset. Free. Filter by agent_id, status, with pagination.\",\n {\n agent_id: z\n .number()\n .int()\n .optional()\n .describe(\"Filter by agent ID\"),\n status: z\n .enum([\"processing\", \"processed\", \"failed\"])\n .optional()\n .describe(\"Filter by processing status\"),\n limit: z\n .number()\n .int()\n .min(1)\n .max(100)\n .optional()\n .describe(\"Number of entries to return (default: 50)\"),\n offset: z\n .number()\n .int()\n .min(0)\n .optional()\n .describe(\"Offset for pagination (default: 0)\"),\n },\n async ({ agent_id, status, limit, offset }) => {\n try {\n const params = new URLSearchParams();\n if (agent_id !== undefined) params.set(\"agent_id\", String(agent_id));\n if (status) params.set(\"status\", status);\n if (limit !== undefined) params.set(\"limit\", String(limit));\n if (offset !== undefined) params.set(\"offset\", String(offset));\n const qs = params.toString();\n const path = `${client.pathPrefix}/ext/datasets/intelligence${qs ? `?${qs}` : \"\"}`;\n const data = await client.get(path);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { readFile } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\n\nconst SUPPORTED_EXTENSIONS = [\n \".pdf\",\n \".docx\",\n \".txt\",\n \".md\",\n \".html\",\n \".csv\",\n \".json\",\n \".jsonl\",\n \".tsv\",\n \".xlsx\",\n \".xls\",\n \".parquet\",\n \".xml\",\n];\n\nexport function registerFileTools(\n server: McpServer,\n client: InflectivClient,\n) {\n server.tool(\n \"inflectiv_list_files\",\n \"List files (knowledge sources) in the dataset. Free.\",\n {\n skip: z\n .number()\n .int()\n .min(0)\n .optional()\n .describe(\"Number of files to skip (default: 0)\"),\n limit: z\n .number()\n .int()\n .min(1)\n .max(100)\n .optional()\n .describe(\"Number of files to return (default: 50)\"),\n },\n async ({ skip, limit }) => {\n try {\n const params = new URLSearchParams();\n if (skip !== undefined) params.set(\"skip\", String(skip));\n if (limit !== undefined) params.set(\"limit\", String(limit));\n const qs = params.toString();\n const path = `${client.pathPrefix}/ext/files/${qs ? `?${qs}` : \"\"}`;\n const data = await client.get(path);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_get_file\",\n \"Get details of a specific file (knowledge source). Free.\",\n {\n file_id: z.number().int().describe(\"File ID\"),\n },\n async ({ file_id }) => {\n try {\n const data = await client.get(`${client.pathPrefix}/ext/files/${file_id}`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_upload_file\",\n `Upload a local file to the dataset as a knowledge source. Costs 5 credits base + 1/MB over 5MB. Supported formats: ${SUPPORTED_EXTENSIONS.join(\", \")}`,\n {\n file_path: z\n .string()\n .describe(\"Absolute path to the local file to upload\"),\n title: z\n .string()\n .max(255)\n .optional()\n .describe(\"Display title for the file\"),\n },\n async ({ file_path, title }) => {\n try {\n const ext = \".\" + file_path.split(\".\").pop()?.toLowerCase();\n if (!SUPPORTED_EXTENSIONS.includes(ext)) {\n return {\n content: [\n {\n type: \"text\",\n text: `Unsupported file type \"${ext}\". Supported: ${SUPPORTED_EXTENSIONS.join(\", \")}`,\n },\n ],\n isError: true as const,\n };\n }\n\n const fileBuffer = await readFile(file_path);\n const filename = basename(file_path);\n const data = await client.uploadFile(\n `${client.pathPrefix}/ext/files/upload`,\n fileBuffer,\n filename,\n title,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_reprocess_file\",\n \"Reprocess a previously uploaded file. Useful after processing failures. Costs 5 credits.\",\n {\n file_id: z.number().int().describe(\"File ID to reprocess\"),\n },\n async ({ file_id }) => {\n try {\n const data = await client.post(`${client.pathPrefix}/ext/files/${file_id}/reprocess`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\n\nexport function registerKnowledgeSourceTools(\n server: McpServer,\n client: InflectivClient,\n) {\n server.tool(\n \"inflectiv_list_knowledge_sources\",\n \"List ALL knowledge sources in the dataset (files, URLs, manual text, AI-generated, etc.). Free.\",\n {\n source_type: z\n .enum([\n \"file\",\n \"url\",\n \"manual\",\n \"ai_generated\",\n \"agent_text\",\n \"agent_url\",\n \"token_pair\",\n ])\n .optional()\n .describe(\"Filter by source type\"),\n status: z\n .enum([\"processing\", \"processed\", \"failed\"])\n .optional()\n .describe(\"Filter by processing status\"),\n skip: z\n .number()\n .int()\n .min(0)\n .optional()\n .describe(\"Number of items to skip (default: 0)\"),\n limit: z\n .number()\n .int()\n .min(1)\n .max(100)\n .optional()\n .describe(\"Number of items to return (default: 50)\"),\n },\n async ({ source_type, status, skip, limit }) => {\n try {\n const params = new URLSearchParams();\n if (source_type) params.set(\"source_type\", source_type);\n if (status) params.set(\"status\", status);\n if (skip !== undefined) params.set(\"skip\", String(skip));\n if (limit !== undefined) params.set(\"limit\", String(limit));\n const qs = params.toString();\n const path = `${client.pathPrefix}/ext/knowledge-sources/${qs ? `?${qs}` : \"\"}`;\n const data = await client.get(path);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport type { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\n\nexport function registerMarketplaceTools(server: McpServer, client: InflectivClient): void {\n server.tool(\n \"inflectiv_browse_skill_marketplace\",\n \"Browse published skill marketplace listings. Free. Supports search, tag filtering, price filtering, and sorting.\",\n {\n query: z.string().max(200).optional().describe(\"Search query\"),\n tags: z.array(z.string()).max(10).optional().describe(\"Filter by tags\"),\n price_type: z.enum([\"free\", \"one_time\"]).optional().describe(\"Filter by price type\"),\n sort_by: z\n .enum([\"newest\", \"popular\", \"highest_rated\", \"price_low\", \"price_high\"])\n .optional()\n .describe(\"Sort order (default: newest)\"),\n platform: z.string().optional().describe(\"Filter by platform (evm, dogecoin)\"),\n skip: z.number().int().min(0).optional().describe(\"Pagination offset\"),\n limit: z.number().int().min(1).max(100).optional().describe(\"Pagination limit (default: 20)\"),\n },\n async (params) => {\n try {\n const searchParams = new URLSearchParams();\n if (params.query) searchParams.set(\"query\", params.query);\n if (params.tags) params.tags.forEach((t) => searchParams.append(\"tags\", t));\n if (params.price_type) searchParams.set(\"price_type\", params.price_type);\n if (params.sort_by) searchParams.set(\"sort_by\", params.sort_by);\n if (params.platform) searchParams.set(\"platform\", params.platform);\n if (params.skip !== undefined) searchParams.set(\"skip\", String(params.skip));\n if (params.limit !== undefined) searchParams.set(\"limit\", String(params.limit));\n\n const qs = searchParams.toString();\n const path = `${client.pathPrefix}/skill-marketplace/listings${qs ? `?${qs}` : \"\"}`;\n const data = await client.get(path);\n\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_get_skill_listing\",\n \"Get detailed information about a skill marketplace listing. Free.\",\n {\n listing_id: z.number().describe(\"Skill listing ID\"),\n },\n async (params) => {\n try {\n const data = await client.get(\n `${client.pathPrefix}/skill-marketplace/listings/${params.listing_id}`,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_acquire_skill\",\n \"Acquire a skill from the marketplace. Free skills cost nothing. Paid skills deduct credits.\",\n {\n listing_id: z.number().describe(\"Skill listing ID to acquire\"),\n },\n async (params) => {\n try {\n const data = await client.post(\n `${client.pathPrefix}/ext/skills/acquire-listing/${params.listing_id}`,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_browse_dataset_marketplace\",\n \"Browse published dataset marketplace listings. Free. No auth required.\",\n {\n query: z.string().max(200).optional().describe(\"Search query\"),\n tags: z.array(z.string()).max(10).optional().describe(\"Filter by tags\"),\n sort_by: z\n .enum([\"newest\", \"popular\", \"highest_rated\", \"price_low\", \"price_high\"])\n .optional()\n .describe(\"Sort order\"),\n skip: z.number().int().min(0).optional().describe(\"Pagination offset\"),\n limit: z.number().int().min(1).max(100).optional().describe(\"Pagination limit\"),\n },\n async (params) => {\n try {\n const searchParams = new URLSearchParams();\n if (params.query) searchParams.set(\"query\", params.query);\n if (params.tags) params.tags.forEach((t) => searchParams.append(\"tags\", t));\n if (params.sort_by) searchParams.set(\"sort_by\", params.sort_by);\n if (params.skip !== undefined) searchParams.set(\"skip\", String(params.skip));\n if (params.limit !== undefined) searchParams.set(\"limit\", String(params.limit));\n\n const qs = searchParams.toString();\n const path = `${client.pathPrefix}/marketplace/listings${qs ? `?${qs}` : \"\"}`;\n const data = await client.get(path);\n\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_browse_agent_marketplace\",\n \"Browse published agent marketplace listings. Free. No auth required.\",\n {\n query: z.string().max(200).optional().describe(\"Search query\"),\n tags: z.array(z.string()).max(10).optional().describe(\"Filter by tags\"),\n sort_by: z\n .enum([\"newest\", \"popular\", \"highest_rated\", \"price_low\", \"price_high\"])\n .optional()\n .describe(\"Sort order\"),\n platform: z.string().optional().describe(\"Filter by platform\"),\n skip: z.number().int().min(0).optional().describe(\"Pagination offset\"),\n limit: z.number().int().min(1).max(100).optional().describe(\"Pagination limit\"),\n },\n async (params) => {\n try {\n const searchParams = new URLSearchParams();\n if (params.query) searchParams.set(\"query\", params.query);\n if (params.tags) params.tags.forEach((t) => searchParams.append(\"tags\", t));\n if (params.sort_by) searchParams.set(\"sort_by\", params.sort_by);\n if (params.platform) searchParams.set(\"platform\", params.platform);\n if (params.skip !== undefined) searchParams.set(\"skip\", String(params.skip));\n if (params.limit !== undefined) searchParams.set(\"limit\", String(params.limit));\n\n const qs = searchParams.toString();\n const path = `${client.pathPrefix}/agent-marketplace/listings${qs ? `?${qs}` : \"\"}`;\n const data = await client.get(path);\n\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { ProjectConfig } from \"./types.js\";\n\nconst PROJECT_MARKERS = [\n \".git\",\n \"package.json\",\n \"pyproject.toml\",\n \"Cargo.toml\",\n \"go.mod\",\n \"pom.xml\",\n \"build.gradle\",\n \"Makefile\",\n];\n\nconst INFLECTIV_DIR = \".inflectiv\";\nconst MEMORY_DIR = \"memory\";\nconst CONFIG_FILE = \"config.json\";\nconst ENTRIES_FILE = \"entries.jsonl\";\nconst INDEX_FILE = \"index.json\";\n\nexport function findProjectRoot(startDir?: string): string {\n let dir = startDir ?? process.cwd();\n const root = path.parse(dir).root;\n\n while (dir !== root) {\n for (const marker of PROJECT_MARKERS) {\n if (fs.existsSync(path.join(dir, marker))) {\n return dir;\n }\n }\n dir = path.dirname(dir);\n }\n\n return startDir ?? process.cwd();\n}\n\nexport function getInflectivDir(projectRoot: string): string {\n return path.join(projectRoot, INFLECTIV_DIR);\n}\n\nexport function getMemoryDir(projectRoot: string): string {\n return path.join(projectRoot, INFLECTIV_DIR, MEMORY_DIR);\n}\n\nexport function getConfigPath(projectRoot: string): string {\n return path.join(projectRoot, INFLECTIV_DIR, CONFIG_FILE);\n}\n\nexport function getEntriesPath(projectRoot: string): string {\n return path.join(projectRoot, INFLECTIV_DIR, MEMORY_DIR, ENTRIES_FILE);\n}\n\nexport function getIndexPath(projectRoot: string): string {\n return path.join(projectRoot, INFLECTIV_DIR, MEMORY_DIR, INDEX_FILE);\n}\n\nfunction generateProjectId(): string {\n const chars = \"abcdefghijklmnopqrstuvwxyz0123456789\";\n let result = \"\";\n for (let i = 0; i < 8; i++) {\n result += chars[Math.floor(Math.random() * chars.length)];\n }\n return result;\n}\n\nexport function ensureProjectStructure(projectRoot: string): ProjectConfig {\n const configPath = getConfigPath(projectRoot);\n\n if (fs.existsSync(configPath)) {\n return JSON.parse(fs.readFileSync(configPath, \"utf-8\")) as ProjectConfig;\n }\n\n const memoryDir = getMemoryDir(projectRoot);\n fs.mkdirSync(memoryDir, { recursive: true });\n\n const config: ProjectConfig = {\n project_id: generateProjectId(),\n project_name: path.basename(projectRoot),\n created_at: new Date().toISOString(),\n memory_count: 0,\n };\n\n fs.writeFileSync(configPath, JSON.stringify(config, null, 2));\n fs.writeFileSync(getEntriesPath(projectRoot), \"\");\n fs.writeFileSync(\n getIndexPath(projectRoot),\n JSON.stringify({ version: 1, tag_index: {}, category_index: {}, word_index: {} }),\n );\n\n return config;\n}\n","import * as fs from \"node:fs\";\nimport type { Importance, MemoryCategory, MemoryEntry, MemoryIndex, ProjectConfig } from \"./types.js\";\nimport {\n ensureProjectStructure,\n findProjectRoot,\n getConfigPath,\n getEntriesPath,\n getIndexPath,\n} from \"./project-context.js\";\n\nconst MAX_CONTENT_LENGTH = 10_000;\nconst MAX_TAGS = 10;\n\nfunction generateId(): string {\n const chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n let result = \"\";\n for (let i = 0; i < 8; i++) {\n result += chars[Math.floor(Math.random() * chars.length)];\n }\n return result;\n}\n\nfunction tokenize(text: string): string[] {\n return text\n .toLowerCase()\n .replace(/[^a-z0-9\\s]/g, \" \")\n .split(/\\s+/)\n .filter((w) => w.length > 2);\n}\n\nexport class MemoryStore {\n private projectRoot: string;\n private config: ProjectConfig;\n\n constructor(startDir?: string) {\n this.projectRoot = findProjectRoot(startDir);\n this.config = ensureProjectStructure(this.projectRoot);\n }\n\n get projectName(): string {\n return this.config.project_name;\n }\n\n get projectId(): string {\n return this.config.project_id;\n }\n\n get memoryCount(): number {\n return this.config.memory_count;\n }\n\n write(\n content: string,\n category: MemoryCategory,\n tags: string[] = [],\n importance: Importance = \"medium\",\n sourceContext?: string,\n ): MemoryEntry {\n if (content.length > MAX_CONTENT_LENGTH) {\n throw new Error(`Content exceeds maximum length of ${MAX_CONTENT_LENGTH} characters`);\n }\n if (tags.length > MAX_TAGS) {\n throw new Error(`Maximum ${MAX_TAGS} tags allowed`);\n }\n\n const now = new Date().toISOString();\n const entry: MemoryEntry = {\n id: generateId(),\n content,\n category,\n tags: tags.map((t) => t.toLowerCase().trim()),\n importance,\n created_at: now,\n updated_at: now,\n source_context: sourceContext,\n };\n\n const entriesPath = getEntriesPath(this.projectRoot);\n fs.appendFileSync(entriesPath, JSON.stringify(entry) + \"\\n\");\n\n this.addToIndex(entry);\n this.config.memory_count++;\n this.saveConfig();\n\n return entry;\n }\n\n list(\n category?: MemoryCategory,\n tags?: string[],\n importance?: Importance,\n limit = 20,\n offset = 0,\n ): { entries: MemoryEntry[]; total: number } {\n let entries = this.readAllEntries();\n\n if (category) {\n entries = entries.filter((e) => e.category === category);\n }\n if (tags && tags.length > 0) {\n const lowerTags = tags.map((t) => t.toLowerCase());\n entries = entries.filter((e) => lowerTags.some((t) => e.tags.includes(t)));\n }\n if (importance) {\n entries = entries.filter((e) => e.importance === importance);\n }\n\n entries.sort((a, b) => b.created_at.localeCompare(a.created_at));\n const total = entries.length;\n\n return {\n entries: entries.slice(offset, offset + limit),\n total,\n };\n }\n\n search(\n query: string,\n category?: MemoryCategory,\n limit = 10,\n ): MemoryEntry[] {\n const index = this.readIndex();\n const queryTokens = tokenize(query);\n\n if (queryTokens.length === 0) {\n return this.list(category, undefined, undefined, limit).entries;\n }\n\n const scores = new Map<string, number>();\n for (const token of queryTokens) {\n const ids = index.word_index[token] ?? [];\n for (const id of ids) {\n scores.set(id, (scores.get(id) ?? 0) + 1);\n }\n }\n\n let entries = this.readAllEntries();\n if (category) {\n entries = entries.filter((e) => e.category === category);\n }\n\n const entryMap = new Map(entries.map((e) => [e.id, e]));\n\n return Array.from(scores.entries())\n .filter(([id]) => entryMap.has(id))\n .sort((a, b) => {\n if (b[1] !== a[1]) return b[1] - a[1];\n const ea = entryMap.get(a[0])!;\n const eb = entryMap.get(b[0])!;\n return eb.created_at.localeCompare(ea.created_at);\n })\n .slice(0, limit)\n .map(([id]) => entryMap.get(id)!)\n .filter(Boolean);\n }\n\n delete(memoryId: string): boolean {\n const entries = this.readAllEntries();\n const filtered = entries.filter((e) => e.id !== memoryId);\n\n if (filtered.length === entries.length) {\n return false;\n }\n\n const entriesPath = getEntriesPath(this.projectRoot);\n fs.writeFileSync(entriesPath, filtered.map((e) => JSON.stringify(e)).join(\"\\n\") + (filtered.length > 0 ? \"\\n\" : \"\"));\n\n this.rebuildIndex(filtered);\n this.config.memory_count = filtered.length;\n this.saveConfig();\n\n return true;\n }\n\n suggestSkillCreation(): {\n memory_count: number;\n category_breakdown: Record<string, number>;\n coverage_analysis: string[];\n recommendation: string;\n ready: boolean;\n } {\n const entries = this.readAllEntries();\n const breakdown: Record<string, number> = {};\n for (const entry of entries) {\n breakdown[entry.category] = (breakdown[entry.category] ?? 0) + 1;\n }\n\n const coverage: string[] = [];\n const highImportance = entries.filter((e) => e.importance === \"high\").length;\n\n if (entries.length >= 10) coverage.push(\"Sufficient memory volume (10+)\");\n else coverage.push(`Low memory volume (${entries.length}/10 minimum recommended)`);\n\n if (Object.keys(breakdown).length >= 3) coverage.push(\"Good category diversity\");\n else coverage.push(\"Limited category diversity - consider adding more categories\");\n\n if (highImportance >= 3) coverage.push(\"Has high-importance entries for core knowledge\");\n else coverage.push(\"Few high-importance entries - mark key decisions as high importance\");\n\n const hasDocs = entries.some(\n (e) => e.category === \"architecture\" || e.category === \"convention\" || e.category === \"workflow\",\n );\n if (hasDocs) coverage.push(\"Contains structural knowledge (architecture/conventions/workflows)\");\n else coverage.push(\"Missing structural knowledge - add architecture or convention entries\");\n\n const ready = entries.length >= 5 && Object.keys(breakdown).length >= 2;\n const recommendation = ready\n ? \"Your memories are ready for skill creation. Use inflectiv_create_skill to synthesize them into a reusable skill document.\"\n : \"Continue accumulating memories across more categories before creating a skill.\";\n\n return {\n memory_count: entries.length,\n category_breakdown: breakdown,\n coverage_analysis: coverage,\n recommendation,\n ready,\n };\n }\n\n getConfig(): ProjectConfig {\n return { ...this.config };\n }\n\n updateSyncTime(): void {\n this.config.last_sync_at = new Date().toISOString();\n this.saveConfig();\n }\n\n readAllEntries(): MemoryEntry[] {\n const entriesPath = getEntriesPath(this.projectRoot);\n if (!fs.existsSync(entriesPath)) return [];\n\n const content = fs.readFileSync(entriesPath, \"utf-8\").trim();\n if (!content) return [];\n\n return content\n .split(\"\\n\")\n .filter(Boolean)\n .map((line) => JSON.parse(line) as MemoryEntry);\n }\n\n private readIndex(): MemoryIndex {\n const indexPath = getIndexPath(this.projectRoot);\n if (!fs.existsSync(indexPath)) {\n return { version: 1, tag_index: {}, category_index: {}, word_index: {} };\n }\n return JSON.parse(fs.readFileSync(indexPath, \"utf-8\")) as MemoryIndex;\n }\n\n private addToIndex(entry: MemoryEntry): void {\n const index = this.readIndex();\n\n for (const tag of entry.tags) {\n if (!index.tag_index[tag]) index.tag_index[tag] = [];\n index.tag_index[tag].push(entry.id);\n }\n\n if (!index.category_index[entry.category]) index.category_index[entry.category] = [];\n index.category_index[entry.category].push(entry.id);\n\n const words = tokenize(entry.content);\n for (const word of words) {\n if (!index.word_index[word]) index.word_index[word] = [];\n if (!index.word_index[word].includes(entry.id)) {\n index.word_index[word].push(entry.id);\n }\n }\n\n fs.writeFileSync(getIndexPath(this.projectRoot), JSON.stringify(index));\n }\n\n private rebuildIndex(entries: MemoryEntry[]): void {\n const index: MemoryIndex = { version: 1, tag_index: {}, category_index: {}, word_index: {} };\n\n for (const entry of entries) {\n for (const tag of entry.tags) {\n if (!index.tag_index[tag]) index.tag_index[tag] = [];\n index.tag_index[tag].push(entry.id);\n }\n\n if (!index.category_index[entry.category]) index.category_index[entry.category] = [];\n index.category_index[entry.category].push(entry.id);\n\n const words = tokenize(entry.content);\n for (const word of words) {\n if (!index.word_index[word]) index.word_index[word] = [];\n if (!index.word_index[word].includes(entry.id)) {\n index.word_index[word].push(entry.id);\n }\n }\n }\n\n fs.writeFileSync(getIndexPath(this.projectRoot), JSON.stringify(index));\n }\n\n private saveConfig(): void {\n const configPath = getConfigPath(this.projectRoot);\n fs.writeFileSync(configPath, JSON.stringify(this.config, null, 2));\n }\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport type { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\nimport { MemoryStore } from \"../memory/memory-store.js\";\n\nexport function registerSkillTools(server: McpServer, client: InflectivClient): void {\n server.tool(\n \"inflectiv_create_skill\",\n \"Synthesize local memories into a reusable skill document and upload to Inflectiv. Costs 5 credits. Requires a global API key (inf_global_*).\",\n {\n name: z.string().min(1).max(255).describe(\"Skill name\"),\n description: z.string().max(1000).optional().describe(\"Skill description\"),\n domain: z.string().max(100).optional().describe(\"Domain (e.g., 'react', 'python', 'devops')\"),\n tags: z.array(z.string()).max(20).optional().describe(\"Tags for discovery\"),\n synthesized_content: z\n .string()\n .min(10)\n .max(100000)\n .describe(\"The synthesized skill document (Markdown). The agent should compose this from local memories.\"),\n create_dataset: z.boolean().optional().describe(\"Create a backing dataset for RAG (default: true)\"),\n memory_ids: z.array(z.string()).optional().describe(\"Specific memory IDs to include (default: all)\"),\n agent_id: z.number().optional().describe(\"Auto-attach skill to this agent\"),\n },\n async (params) => {\n try {\n // Read local memories to include in the request\n let memories: Array<Record<string, unknown>> = [];\n try {\n const store = new MemoryStore();\n let entries = store.readAllEntries();\n if (params.memory_ids && params.memory_ids.length > 0) {\n const ids = new Set(params.memory_ids);\n entries = entries.filter((e) => ids.has(e.id));\n }\n memories = entries.map((e) => ({\n content: e.content,\n category: e.category,\n tags: e.tags,\n importance: e.importance,\n source_context: e.source_context,\n }));\n } catch {\n // No local memories available, proceed without\n }\n\n const body: Record<string, unknown> = {\n name: params.name,\n synthesized_content: params.synthesized_content,\n create_dataset: params.create_dataset ?? true,\n memories,\n };\n if (params.description) body.description = params.description;\n if (params.domain) body.domain = params.domain;\n if (params.tags) body.tags = params.tags;\n if (params.agent_id) body.agent_id = params.agent_id;\n\n try {\n const store = new MemoryStore();\n body.source_project_name = store.projectName;\n } catch {\n // ignore\n }\n\n const data = await client.post(`${client.pathPrefix}/ext/skills/create`, body);\n\n // Update local sync time\n try {\n const store = new MemoryStore();\n store.updateSyncTime();\n } catch {\n // ignore\n }\n\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_apply_skill\",\n \"Apply a skill to an agent. Injects the skill document into the agent's system prompt and optionally attaches the skill's dataset. Costs 2 credits.\",\n {\n skill_id: z.number().describe(\"Skill ID to apply\"),\n agent_id: z.number().describe(\"Agent ID to apply the skill to\"),\n inject_as_prompt: z.boolean().optional().describe(\"Inject skill as system prompt context (default: true)\"),\n attach_dataset: z.boolean().optional().describe(\"Attach skill's dataset for RAG (default: true)\"),\n },\n async (params) => {\n try {\n const data = await client.post(\n `${client.pathPrefix}/ext/skills/${params.skill_id}/apply`,\n {\n agent_id: params.agent_id,\n inject_as_prompt: params.inject_as_prompt ?? true,\n attach_dataset: params.attach_dataset ?? true,\n },\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_list_skills\",\n \"List your skills (owned and acquired). Free.\",\n {},\n async () => {\n try {\n const data = await client.get(`${client.pathPrefix}/ext/skills/`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_scan_skill_security\",\n \"Preview security scan on skill content before creating. Runs passes 1-4 (secrets, PII, prompt injection, metadata) and returns findings WITHOUT spending credits. Free.\",\n {\n synthesized_content: z\n .string()\n .min(1)\n .max(100000)\n .describe(\"The skill content to scan\"),\n },\n async (params) => {\n try {\n const data = await client.post(\n `${client.pathPrefix}/ext/skills/scan-security`,\n { synthesized_content: params.synthesized_content },\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\n\nconst VALID_EVENTS = [\n \"intelligence.processed\",\n \"intelligence.failed\",\n \"intelligence.deduped\",\n \"dataset.mode_changed\",\n] as const;\n\nexport function registerWebhookTools(\n server: McpServer,\n client: InflectivClient,\n) {\n server.tool(\n \"inflectiv_register_webhook\",\n `Register a webhook to receive event notifications. URL must use HTTPS. Valid events: ${VALID_EVENTS.join(\", \")}. Max 10 webhooks per user. Free.`,\n {\n url: z\n .string()\n .url()\n .startsWith(\"https://\", \"Webhook URL must use HTTPS\")\n .min(10)\n .max(2000)\n .describe(\"HTTPS webhook endpoint URL\"),\n events: z\n .array(z.enum(VALID_EVENTS))\n .min(1)\n .describe(\"Events to subscribe to\"),\n description: z\n .string()\n .max(500)\n .optional()\n .describe(\"Webhook description\"),\n },\n async (params) => {\n try {\n const data = await client.post(`${client.pathPrefix}/ext/webhooks/`, params);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_list_webhooks\",\n \"List all registered webhooks. Free.\",\n {},\n async () => {\n try {\n const data = await client.get(`${client.pathPrefix}/ext/webhooks/`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_test_webhook\",\n \"Send a test event to a registered webhook to verify it's receiving payloads. Free.\",\n {\n webhook_id: z.number().int().describe(\"Webhook ID to test\"),\n },\n async ({ webhook_id }) => {\n try {\n const data = await client.post(\n `${client.pathPrefix}/ext/webhooks/${webhook_id}/test`,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","export type MemoryCategory =\n | \"decision\"\n | \"constraint\"\n | \"workflow\"\n | \"architecture\"\n | \"gotcha\"\n | \"preference\"\n | \"convention\"\n | \"dependency\"\n | \"todo\"\n | \"general\";\n\nexport const MEMORY_CATEGORIES: MemoryCategory[] = [\n \"decision\",\n \"constraint\",\n \"workflow\",\n \"architecture\",\n \"gotcha\",\n \"preference\",\n \"convention\",\n \"dependency\",\n \"todo\",\n \"general\",\n];\n\nexport type Importance = \"low\" | \"medium\" | \"high\";\n\nexport interface MemoryEntry {\n id: string;\n content: string;\n category: MemoryCategory;\n tags: string[];\n importance: Importance;\n created_at: string;\n updated_at: string;\n source_context?: string;\n}\n\nexport interface ProjectConfig {\n project_id: string;\n project_name: string;\n created_at: string;\n memory_count: number;\n last_sync_at?: string;\n}\n\nexport interface MemoryIndex {\n version: 1;\n tag_index: Record<string, string[]>;\n category_index: Record<string, string[]>;\n word_index: Record<string, string[]>;\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { MemoryStore } from \"../memory/memory-store.js\";\nimport { MEMORY_CATEGORIES } from \"../memory/types.js\";\n\nlet store: MemoryStore | null = null;\n\nfunction getStore(): MemoryStore {\n if (!store) {\n store = new MemoryStore();\n }\n return store;\n}\n\nexport function registerMemoryTools(server: McpServer): void {\n server.tool(\n \"inflectiv_write_memory\",\n \"Write a memory entry to the local project memory (.inflectiv/memory/). Free — local only, no API call.\",\n {\n content: z.string().min(1).max(10000).describe(\"Memory content (max 10,000 chars)\"),\n category: z.enum(MEMORY_CATEGORIES as [string, ...string[]]).describe(\n \"Category: decision, constraint, workflow, architecture, gotcha, preference, convention, dependency, todo, general\",\n ),\n tags: z.array(z.string()).max(10).optional().describe(\"Up to 10 tags for filtering\"),\n importance: z.enum([\"low\", \"medium\", \"high\"]).optional().describe(\"Importance level (default: medium)\"),\n source_context: z.string().optional().describe(\"What prompted this memory (file path, topic)\"),\n },\n async (params) => {\n try {\n const s = getStore();\n const entry = s.write(\n params.content,\n params.category as any,\n params.tags ?? [],\n (params.importance as any) ?? \"medium\",\n params.source_context,\n );\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(\n {\n status: \"saved\",\n memory_id: entry.id,\n project: s.projectName,\n total_memories: s.memoryCount,\n category: entry.category,\n tags: entry.tags,\n },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n return {\n content: [{ type: \"text\", text: `Error writing memory: ${err instanceof Error ? err.message : String(err)}` }],\n isError: true,\n };\n }\n },\n );\n\n server.tool(\n \"inflectiv_list_memories\",\n \"List local project memories with optional filters. Free — local only.\",\n {\n category: z.enum(MEMORY_CATEGORIES as [string, ...string[]]).optional().describe(\"Filter by category\"),\n tags: z.array(z.string()).optional().describe(\"Filter by tags (OR match)\"),\n importance: z.enum([\"low\", \"medium\", \"high\"]).optional().describe(\"Filter by importance\"),\n limit: z.number().min(1).max(100).optional().describe(\"Max entries to return (default: 20)\"),\n offset: z.number().min(0).optional().describe(\"Offset for pagination\"),\n },\n async (params) => {\n try {\n const s = getStore();\n const result = s.list(\n params.category as any,\n params.tags,\n params.importance as any,\n params.limit ?? 20,\n params.offset ?? 0,\n );\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(\n {\n project: s.projectName,\n total: result.total,\n returned: result.entries.length,\n entries: result.entries,\n },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n return {\n content: [{ type: \"text\", text: `Error listing memories: ${err instanceof Error ? err.message : String(err)}` }],\n isError: true,\n };\n }\n },\n );\n\n server.tool(\n \"inflectiv_search_memories\",\n \"Keyword search over local project memories. Free — local only.\",\n {\n query: z.string().min(1).describe(\"Search query\"),\n category: z.enum(MEMORY_CATEGORIES as [string, ...string[]]).optional().describe(\"Filter by category\"),\n limit: z.number().min(1).max(50).optional().describe(\"Max results (default: 10)\"),\n },\n async (params) => {\n try {\n const s = getStore();\n const results = s.search(params.query, params.category as any, params.limit ?? 10);\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(\n {\n project: s.projectName,\n query: params.query,\n results_count: results.length,\n results,\n },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n return {\n content: [\n { type: \"text\", text: `Error searching memories: ${err instanceof Error ? err.message : String(err)}` },\n ],\n isError: true,\n };\n }\n },\n );\n\n server.tool(\n \"inflectiv_delete_memory\",\n \"Delete a memory entry by ID. Free — local only.\",\n {\n memory_id: z.string().describe(\"ID of the memory entry to delete\"),\n },\n async (params) => {\n try {\n const s = getStore();\n const deleted = s.delete(params.memory_id);\n if (!deleted) {\n return {\n content: [{ type: \"text\", text: `Memory entry '${params.memory_id}' not found.` }],\n isError: true,\n };\n }\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(\n {\n status: \"deleted\",\n memory_id: params.memory_id,\n remaining_memories: s.memoryCount,\n },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n return {\n content: [\n { type: \"text\", text: `Error deleting memory: ${err instanceof Error ? err.message : String(err)}` },\n ],\n isError: true,\n };\n }\n },\n );\n\n server.tool(\n \"inflectiv_suggest_skill_creation\",\n \"Analyze local memories and recommend if they're ready for skill creation. Free — local only.\",\n {},\n async () => {\n try {\n const s = getStore();\n const analysis = s.suggestSkillCreation();\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(\n { project: s.projectName, ...analysis },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n return {\n content: [{ type: \"text\", text: `Error analyzing memories: ${err instanceof Error ? err.message : String(err)}` }],\n isError: true,\n };\n }\n },\n );\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\n\nexport function registerResources(server: McpServer) {\n server.resource(\n \"docs-overview\",\n \"inflectiv://docs/overview\",\n {\n description: \"Inflectiv API overview — authentication, base URL, credit system\",\n mimeType: \"text/markdown\",\n },\n async () => ({\n contents: [\n {\n uri: \"inflectiv://docs/overview\",\n mimeType: \"text/markdown\",\n text: OVERVIEW_DOC,\n },\n ],\n }),\n );\n\n server.resource(\n \"docs-webhook-events\",\n \"inflectiv://docs/webhook-events\",\n {\n description: \"Webhook event types and payload schemas\",\n mimeType: \"text/markdown\",\n },\n async () => ({\n contents: [\n {\n uri: \"inflectiv://docs/webhook-events\",\n mimeType: \"text/markdown\",\n text: WEBHOOK_EVENTS_DOC,\n },\n ],\n }),\n );\n\n server.resource(\n \"docs-credit-costs\",\n \"inflectiv://docs/credit-costs\",\n {\n description: \"Credit cost table for all API operations\",\n mimeType: \"text/markdown\",\n },\n async () => ({\n contents: [\n {\n uri: \"inflectiv://docs/credit-costs\",\n mimeType: \"text/markdown\",\n text: CREDIT_COSTS_DOC,\n },\n ],\n }),\n );\n}\n\nconst OVERVIEW_DOC = `# Inflectiv API Overview\n\n## Authentication\nAll requests require an API key passed via the \\`X-API-Key\\` header.\nAPI keys have the prefix \\`inf_\\` and are scoped to a single dataset.\n\n## Base URL\nProduction (via Next.js proxy):\n\\`\\`\\`\nhttps://app.inflectiv.ai/api/platform/ext/\n\\`\\`\\`\nLocal development:\n\\`\\`\\`\nhttp://localhost:18001/api/v2/ext/\n\\`\\`\\`\n\n## Concepts\n\n### Agents\nAI chatbots trained on your data. Each agent can have datasets attached for RAG-enabled conversations.\n\n### Datasets\nCollections of knowledge sources (files, intelligence entries) that agents use to answer questions.\nEach API key is scoped to one dataset.\n\n### Intelligence\nProgrammatic knowledge entries written directly to a dataset. Useful for syncing external data.\nDuplicates are automatically detected and cost 0 credits.\n\n### Files\nDocuments uploaded to a dataset. Supported formats: PDF, DOCX, TXT, MD, HTML, CSV, JSON, JSONL, TSV, XLSX, XLS, Parquet, XML.\nFiles are chunked and embedded automatically.\n\n### Webhooks\nHTTPS endpoints that receive event notifications (e.g., when intelligence is processed).\n\n## Credit System\nMost operations cost credits. Free-tier operations include listing resources and managing webhooks.\nSee the credit-costs resource for a full breakdown.\n\n## Getting Started\n1. Get an API key from the Inflectiv dashboard (Settings > API Keys)\n2. Use \\`inflectiv_list_datasets\\` to see your scoped dataset\n3. Use \\`inflectiv_list_agents\\` to see agents attached to the dataset\n4. Upload files or write intelligence to add knowledge\n5. Chat with agents using \\`inflectiv_chat_with_agent\\`\n`;\n\nconst WEBHOOK_EVENTS_DOC = `# Webhook Events\n\n## Available Events\n\n### \\`intelligence.processed\\`\nFired when an intelligence entry has been successfully embedded and indexed.\n\\`\\`\\`json\n{\n \"event\": \"intelligence.processed\",\n \"timestamp\": \"2025-01-01T00:00:00Z\",\n \"data\": {\n \"intelligence_id\": 123,\n \"dataset_id\": 456,\n \"title\": \"Entry title\",\n \"status\": \"processed\"\n }\n}\n\\`\\`\\`\n\n### \\`intelligence.failed\\`\nFired when intelligence processing fails.\n\\`\\`\\`json\n{\n \"event\": \"intelligence.failed\",\n \"timestamp\": \"2025-01-01T00:00:00Z\",\n \"data\": {\n \"intelligence_id\": 123,\n \"dataset_id\": 456,\n \"title\": \"Entry title\",\n \"status\": \"failed\",\n \"error\": \"Processing error message\"\n }\n}\n\\`\\`\\`\n\n### \\`intelligence.deduped\\`\nFired when a duplicate intelligence entry is detected and skipped.\n\\`\\`\\`json\n{\n \"event\": \"intelligence.deduped\",\n \"timestamp\": \"2025-01-01T00:00:00Z\",\n \"data\": {\n \"intelligence_id\": 123,\n \"dataset_id\": 456,\n \"title\": \"Entry title\",\n \"status\": \"deduped\"\n }\n}\n\\`\\`\\`\n\n### \\`dataset.mode_changed\\`\nFired when a dataset's mode is changed on an agent.\n\\`\\`\\`json\n{\n \"event\": \"dataset.mode_changed\",\n \"timestamp\": \"2025-01-01T00:00:00Z\",\n \"data\": {\n \"agent_id\": 789,\n \"dataset_id\": 456,\n \"old_mode\": \"read_only\",\n \"new_mode\": \"self_learning\"\n }\n}\n\\`\\`\\`\n\n## Webhook Security\nEach webhook receives a unique \\`secret\\` upon creation. Use this to verify payload signatures.\nThe secret is only returned once during creation — store it securely.\n`;\n\nconst CREDIT_COSTS_DOC = `# Credit Costs\n\n| Operation | Tool | Credits |\n|-----------|------|---------|\n| List agents | \\`inflectiv_list_agents\\` | Free |\n| Create agent | \\`inflectiv_create_agent\\` | 5 |\n| Get agent | \\`inflectiv_get_agent\\` | Free |\n| Update agent config | \\`inflectiv_update_agent_config\\` | 2 |\n| Chat with agent | \\`inflectiv_chat_with_agent\\` | 1 |\n| List agent datasets | \\`inflectiv_list_agent_datasets\\` | Free |\n| Attach dataset | \\`inflectiv_attach_dataset\\` | Free |\n| Update dataset mode | \\`inflectiv_update_dataset_mode\\` | Free |\n| List datasets | \\`inflectiv_list_datasets\\` | Free |\n| Update dataset | \\`inflectiv_update_dataset\\` | Free |\n| Reindex dataset | \\`inflectiv_reindex_dataset\\` | 2 |\n| Search dataset | \\`inflectiv_search_dataset\\` | 1 |\n| Batch search | \\`inflectiv_batch_search\\` | 1 per query |\n| Write intelligence | \\`inflectiv_write_intelligence\\` | 1 (0 if dup) |\n| Batch write intelligence | \\`inflectiv_batch_write_intelligence\\` | 1 per new entry |\n| List intelligence | \\`inflectiv_list_intelligence\\` | Free |\n| List files | \\`inflectiv_list_files\\` | Free |\n| Get file | \\`inflectiv_get_file\\` | Free |\n| Upload file | \\`inflectiv_upload_file\\` | 5 base + 1/MB over 5MB |\n| Reprocess file | \\`inflectiv_reprocess_file\\` | 5 |\n| Register webhook | \\`inflectiv_register_webhook\\` | Free |\n| List webhooks | \\`inflectiv_list_webhooks\\` | Free |\n| Test webhook | \\`inflectiv_test_webhook\\` | Free |\n`;\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { InflectivClient } from \"./client.js\";\nimport {\n registerAgentTools,\n registerDatasetTools,\n registerFileTools,\n registerKnowledgeSourceTools,\n registerMarketplaceTools,\n registerMemoryTools,\n registerSkillTools,\n registerWebhookTools,\n} from \"./tools/index.js\";\nimport { registerResources } from \"./resources/index.js\";\n\nexport function createServer(): McpServer {\n const apiKey = process.env.INFLECTIV_API_KEY || null;\n const walletKey = process.env.INFLECTIV_WALLET_PRIVATE_KEY;\n\n if (!apiKey && !walletKey) {\n console.error(\n \"Error: Either INFLECTIV_API_KEY or INFLECTIV_WALLET_PRIVATE_KEY is required.\\n\" +\n \"Get your API key from https://app.inflectiv.ai (Settings > API Keys).\\n\" +\n \"Or set INFLECTIV_WALLET_PRIVATE_KEY for X402 crypto payments.\",\n );\n process.exit(1);\n }\n\n const baseUrl = process.env.INFLECTIV_BASE_URL;\n const client = new InflectivClient(apiKey, baseUrl);\n\n const server = new McpServer({\n name: \"inflectiv\",\n version: \"0.1.0\",\n });\n\n registerAgentTools(server, client);\n registerDatasetTools(server, client);\n registerFileTools(server, client);\n registerKnowledgeSourceTools(server, client);\n registerSkillTools(server, client);\n registerMarketplaceTools(server, client);\n registerWebhookTools(server, client);\n registerMemoryTools(server);\n registerResources(server);\n\n return server;\n}\n","import { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { createServer } from \"./server.js\";\n\nasync function main() {\n const server = createServer();\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n\nmain().catch((err) => {\n console.error(\"Fatal error:\", err);\n process.exit(1);\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/client.ts","../src/errors.ts","../src/tools/agents.ts","../src/tools/datasets.ts","../src/tools/files.ts","../src/tools/knowledge-sources.ts","../src/tools/marketplace.ts","../src/memory/project-context.ts","../src/memory/memory-store.ts","../src/tools/skills.ts","../src/tools/webhooks.ts","../src/memory/types.ts","../src/tools/memory.ts","../src/resources/api-docs.ts","../src/server.ts","../src/index.ts"],"names":["path","z","fs","store","path2","fs3"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from \"zod\";\n\nconst ApiKeySchema = z\n .string()\n .startsWith(\"inf_\", \"API key must start with 'inf_'\");\n\nexport class InflectivApiError extends Error {\n constructor(\n public status: number,\n public body: unknown,\n ) {\n const msg =\n typeof body === \"object\" && body !== null && \"detail\" in body\n ? String((body as { detail: unknown }).detail)\n : JSON.stringify(body);\n super(`HTTP ${status}: ${msg}`);\n this.name = \"InflectivApiError\";\n }\n}\n\nexport class InflectivClient {\n private apiKey: string | null;\n private baseUrl: string;\n\n constructor(apiKey: string | null, baseUrl?: string) {\n this.apiKey = apiKey ? ApiKeySchema.parse(apiKey) : null;\n this.baseUrl = (\n baseUrl ?? \"https://app.inflectiv.ai/api/platform\"\n ).replace(/\\/$/, \"\");\n }\n\n /** Returns the API path prefix based on environment:\n * - Production (app.inflectiv.ai/api/platform): no prefix (proxy adds /ext/)\n * - All other environments (localhost, Railway, etc.): /api/v2 (direct API access)\n */\n get pathPrefix(): string {\n if (this.baseUrl.includes(\"app.inflectiv.ai\")) {\n return \"\";\n }\n return \"/api/v2\";\n }\n\n private headers(extra?: Record<string, string>): Record<string, string> {\n const h: Record<string, string> = {};\n if (this.apiKey) {\n h[\"X-API-Key\"] = this.apiKey;\n }\n return { ...h, ...extra };\n }\n\n private async request<T>(\n method: string,\n path: string,\n body?: unknown,\n ): Promise<T> {\n const url = `${this.baseUrl}${path}`.replace(/\\/+$/, \"\");\n const init: RequestInit = {\n method,\n headers: this.headers(\n body !== undefined ? { \"Content-Type\": \"application/json\" } : undefined,\n ),\n body: body !== undefined ? JSON.stringify(body) : undefined,\n };\n\n const res = await fetch(url, init);\n\n if (!res.ok) {\n let errorBody: unknown;\n try {\n errorBody = await res.json();\n } catch {\n errorBody = await res.text();\n }\n throw new InflectivApiError(res.status, errorBody);\n }\n\n return res.json() as Promise<T>;\n }\n\n async get<T>(path: string): Promise<T> {\n return this.request<T>(\"GET\", path);\n }\n\n async post<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(\"POST\", path, body);\n }\n\n async put<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(\"PUT\", path, body);\n }\n\n async patch<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(\"PATCH\", path, body);\n }\n\n async delete<T>(path: string): Promise<T> {\n return this.request<T>(\"DELETE\", path);\n }\n\n async uploadFile(\n path: string,\n fileBuffer: Buffer,\n filename: string,\n title?: string,\n dataset?: string,\n ): Promise<unknown> {\n const formData = new FormData();\n const blob = new Blob([fileBuffer]);\n formData.append(\"file\", blob, filename);\n if (title) {\n formData.append(\"title\", title);\n }\n\n // dataset is a Query param on the backend, so pass via URL\n const qs = dataset ? `?dataset=${encodeURIComponent(dataset)}` : \"\";\n const url = `${this.baseUrl}${path}${qs}`.replace(/\\/+$/, \"\");\n const res = await fetch(url, {\n method: \"POST\",\n headers: this.headers(),\n body: formData,\n });\n\n if (!res.ok) {\n let errorBody: unknown;\n try {\n errorBody = await res.json();\n } catch {\n errorBody = await res.text();\n }\n throw new InflectivApiError(res.status, errorBody);\n }\n\n return res.json();\n }\n}\n","import { ZodError } from \"zod\";\nimport { InflectivApiError } from \"./client.js\";\n\nexport function formatError(err: unknown): {\n content: { type: \"text\"; text: string }[];\n isError: true;\n} {\n let message: string;\n\n if (err instanceof InflectivApiError) {\n const body = err.body;\n let detail = err.message;\n\n if (typeof body === \"object\" && body !== null) {\n const b = body as Record<string, unknown>;\n if (b.detail) detail = String(b.detail);\n if (b.credits_required) {\n detail += `\\n\\nInsufficient credits. Required: ${b.credits_required}, Available: ${b.credits_available ?? \"unknown\"}. Top up at https://app.inflectiv.ai`;\n }\n }\n\n message = `Inflectiv API Error (${err.status}): ${detail}`;\n } else if (err instanceof ZodError) {\n const issues = err.issues\n .map((i) => ` - ${i.path.join(\".\")}: ${i.message}`)\n .join(\"\\n\");\n message = `Validation Error:\\n${issues}`;\n } else if (err instanceof Error) {\n message = err.message.includes(\"fetch failed\")\n ? `Network error: Could not reach Inflectiv API. Check your INFLECTIV_BASE_URL and network connection.`\n : `Error: ${err.message}`;\n } else {\n message = `Unknown error: ${String(err)}`;\n }\n\n return {\n content: [{ type: \"text\", text: message }],\n isError: true,\n };\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\n\nexport function registerAgentTools(server: McpServer, client: InflectivClient) {\n server.tool(\n \"inflectiv_list_agents\",\n \"List all agents owned by you. With a global key: lists all agents. With a dataset key: lists agents with that dataset attached. Free.\",\n {},\n async () => {\n try {\n const data = await client.get(`${client.pathPrefix}/ext/agents/`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_create_agent\",\n \"Create a new AI agent attached to the API key's dataset. Costs 5 credits.\",\n {\n name: z.string().min(1).max(255).describe(\"Agent name\"),\n description: z\n .string()\n .max(1000)\n .optional()\n .describe(\"Agent description\"),\n personality: z\n .string()\n .optional()\n .describe(\n 'Agent personality style (default: \"professional\")',\n ),\n system_instructions: z\n .string()\n .max(2000)\n .optional()\n .describe(\"Custom system instructions for the agent\"),\n response_length: z\n .string()\n .optional()\n .describe('Response length preference (default: \"concise\")'),\n model_name: z\n .string()\n .optional()\n .describe('LLM model name (default: \"gpt-4o-mini\")'),\n temperature: z\n .number()\n .int()\n .min(0)\n .max(100)\n .optional()\n .describe(\"Temperature 0-100 (default: 70)\"),\n dataset: z.string().optional().describe(\"Dataset ID or api_name to attach (required for global API keys)\"),\n },\n async ({ dataset, ...body }) => {\n try {\n const qs = dataset ? `?dataset=${dataset}` : \"\";\n const data = await client.post(`${client.pathPrefix}/ext/agents/${qs}`, body);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_get_agent\",\n \"Get details of a specific agent. Free.\",\n {\n agent_id: z.number().int().describe(\"Agent ID\"),\n },\n async ({ agent_id }) => {\n try {\n const data = await client.get(`${client.pathPrefix}/ext/agents/${agent_id}`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_update_agent_config\",\n \"Update an agent's configuration (personality, instructions, model, temperature, etc.). Costs 2 credits.\",\n {\n agent_id: z.number().int().describe(\"Agent ID\"),\n name: z.string().min(1).max(255).optional().describe(\"Agent name\"),\n description: z\n .string()\n .max(1000)\n .optional()\n .describe(\"Agent description\"),\n personality: z.string().optional().describe(\"Agent personality style\"),\n system_instructions: z\n .string()\n .max(2000)\n .optional()\n .describe(\"Custom system instructions\"),\n response_length: z\n .string()\n .optional()\n .describe(\"Response length preference\"),\n model_name: z.string().optional().describe(\"LLM model name\"),\n temperature: z\n .number()\n .int()\n .min(0)\n .max(100)\n .optional()\n .describe(\"Temperature 0-100\"),\n },\n async ({ agent_id, ...body }) => {\n try {\n const data = await client.put(\n `${client.pathPrefix}/ext/agents/${agent_id}/config`,\n body,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_chat_with_agent\",\n 'Send a message to an agent and get a RAG-enabled response. Costs 1 credit. Provide conversation_history as an array of {role, content} objects for multi-turn chat.',\n {\n agent_id: z.number().int().describe(\"Agent ID\"),\n message: z.string().min(1).max(4000).describe(\"Message to send\"),\n conversation_history: z\n .array(\n z.object({\n role: z.string().describe('Message role (e.g. \"user\", \"assistant\")'),\n content: z.string().describe(\"Message content\"),\n }),\n )\n .optional()\n .describe(\"Previous conversation messages for context\"),\n },\n async ({ agent_id, message, conversation_history }) => {\n try {\n const data = await client.post(`${client.pathPrefix}/ext/agents/${agent_id}/chat`, {\n message,\n conversation_history: conversation_history ?? [],\n });\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_list_agent_datasets\",\n \"List all datasets attached to an agent. Free.\",\n {\n agent_id: z.number().int().describe(\"Agent ID\"),\n },\n async ({ agent_id }) => {\n try {\n const data = await client.get(`${client.pathPrefix}/ext/agents/${agent_id}/datasets`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_attach_dataset\",\n 'Attach a dataset to an agent. Free. Mode can be \"read_only\" or \"self_learning\".',\n {\n agent_id: z.number().int().describe(\"Agent ID\"),\n dataset_id: z.number().int().describe(\"Dataset ID to attach\"),\n mode: z\n .enum([\"read_only\", \"self_learning\"])\n .optional()\n .describe('Dataset mode (default: \"read_only\")'),\n },\n async ({ agent_id, dataset_id, mode }) => {\n try {\n const data = await client.post(\n `${client.pathPrefix}/ext/agents/${agent_id}/datasets`,\n {\n dataset_id,\n mode: mode ?? \"read_only\",\n },\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_update_dataset_mode\",\n 'Update the mode of a dataset attached to an agent. Mode: \"read_only\" or \"self_learning\". Free.',\n {\n agent_id: z.number().int().describe(\"Agent ID\"),\n dataset_id: z.number().int().describe(\"Dataset ID\"),\n mode: z\n .enum([\"read_only\", \"self_learning\"])\n .describe(\"New dataset mode\"),\n },\n async ({ agent_id, dataset_id, mode }) => {\n try {\n const data = await client.patch(\n `${client.pathPrefix}/ext/agents/${agent_id}/datasets/${dataset_id}`,\n { mode },\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\n\nexport function registerDatasetTools(\n server: McpServer,\n client: InflectivClient,\n) {\n server.tool(\n \"inflectiv_list_datasets\",\n \"List datasets accessible via this API key. Free.\",\n {\n dataset: z\n .string()\n .optional()\n .describe(\n \"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)\",\n ),\n },\n async ({ dataset }) => {\n try {\n const qs = dataset ? `?dataset=${dataset}` : \"\";\n const data = await client.get(`${client.pathPrefix}/ext/datasets/${qs}`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_update_dataset\",\n \"Update dataset name and/or description. Only dataset owner can update. Free.\",\n {\n dataset: z\n .string()\n .optional()\n .describe(\n \"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)\",\n ),\n name: z\n .string()\n .min(1)\n .max(255)\n .optional()\n .describe(\"New dataset name\"),\n description: z\n .string()\n .max(1000)\n .optional()\n .describe(\"New dataset description\"),\n },\n async ({ dataset, ...params }) => {\n try {\n const qs = dataset ? `?dataset=${dataset}` : \"\";\n const data = await client.put(`${client.pathPrefix}/ext/datasets/${qs}`, params);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_reindex_dataset\",\n \"Reindex dataset vectors. Useful after bulk changes. Costs 2 credits.\",\n {\n dataset: z\n .string()\n .optional()\n .describe(\n \"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)\",\n ),\n },\n async ({ dataset }) => {\n try {\n const qs = dataset ? `?dataset=${dataset}` : \"\";\n const data = await client.post(`${client.pathPrefix}/ext/datasets/reindex${qs}`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_search_dataset\",\n \"Semantic search across the dataset's knowledge base. Costs 1 credit.\",\n {\n dataset: z\n .string()\n .optional()\n .describe(\n \"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)\",\n ),\n query: z.string().min(1).max(2000).describe(\"Search query\"),\n top_k: z\n .number()\n .int()\n .min(1)\n .max(20)\n .optional()\n .describe(\"Number of results to return (default: 5)\"),\n score_threshold: z\n .number()\n .min(0)\n .max(1)\n .optional()\n .describe(\"Minimum similarity score 0.0-1.0 (default: 0.6)\"),\n },\n async ({ dataset, ...params }) => {\n try {\n const qs = dataset ? `?dataset=${dataset}` : \"\";\n const data = await client.post(`${client.pathPrefix}/ext/datasets/query${qs}`, params);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_batch_search\",\n \"Run multiple semantic searches in a single call. Costs 1 credit per query.\",\n {\n dataset: z\n .string()\n .optional()\n .describe(\n \"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)\",\n ),\n queries: z\n .array(z.string())\n .min(1)\n .max(20)\n .describe(\"List of search queries (1-20)\"),\n top_k: z\n .number()\n .int()\n .min(1)\n .max(20)\n .optional()\n .describe(\"Number of results per query (default: 5)\"),\n score_threshold: z\n .number()\n .min(0)\n .max(1)\n .optional()\n .describe(\"Minimum similarity score 0.0-1.0 (default: 0.6)\"),\n },\n async ({ dataset, ...params }) => {\n try {\n const qs = dataset ? `?dataset=${dataset}` : \"\";\n const data = await client.post(\n `${client.pathPrefix}/ext/datasets/query/batch${qs}`,\n params,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_write_intelligence\",\n \"Write a single intelligence entry to the dataset. Costs 1 credit (0 if duplicate detected). Content is embedded and becomes searchable.\",\n {\n dataset: z\n .string()\n .optional()\n .describe(\n \"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)\",\n ),\n agent_id: z\n .number()\n .int()\n .describe(\"Agent ID that owns this intelligence\"),\n content: z\n .string()\n .min(1)\n .max(50000)\n .describe(\"Intelligence content text\"),\n title: z\n .string()\n .max(255)\n .optional()\n .describe(\"Title for the intelligence entry\"),\n source_type: z\n .enum([\"agent_text\", \"agent_url\"])\n .optional()\n .describe('Source type (default: \"agent_text\")'),\n source_identifier: z\n .string()\n .max(2000)\n .optional()\n .describe(\"Source identifier (e.g. URL)\"),\n },\n async ({ agent_id, dataset, ...body }) => {\n try {\n const datasetQs = dataset ? `&dataset=${dataset}` : \"\";\n const data = await client.post(\n `${client.pathPrefix}/ext/datasets/intelligence?agent_id=${agent_id}${datasetQs}`,\n body,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_batch_write_intelligence\",\n \"Write multiple intelligence entries in a single call. Costs 1 credit per new entry (duplicates are free). Max 50 entries.\",\n {\n dataset: z\n .string()\n .optional()\n .describe(\n \"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)\",\n ),\n agent_id: z\n .number()\n .int()\n .describe(\"Agent ID that owns these intelligence entries\"),\n entries: z\n .array(\n z.object({\n content: z\n .string()\n .min(1)\n .max(50000)\n .describe(\"Intelligence content text\"),\n title: z.string().max(255).optional().describe(\"Entry title\"),\n source_type: z\n .enum([\"agent_text\", \"agent_url\"])\n .optional()\n .describe('Source type (default: \"agent_text\")'),\n source_identifier: z\n .string()\n .max(2000)\n .optional()\n .describe(\"Source identifier\"),\n }),\n )\n .min(1)\n .max(50)\n .describe(\"Intelligence entries to write (1-50)\"),\n },\n async ({ agent_id, dataset, entries }) => {\n try {\n const datasetQs = dataset ? `&dataset=${dataset}` : \"\";\n const data = await client.post(\n `${client.pathPrefix}/ext/datasets/intelligence/batch?agent_id=${agent_id}${datasetQs}`,\n { entries },\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_list_intelligence\",\n \"List intelligence entries in the dataset. Free. Filter by agent_id, status, with pagination.\",\n {\n dataset: z\n .string()\n .optional()\n .describe(\n \"Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)\",\n ),\n agent_id: z\n .number()\n .int()\n .optional()\n .describe(\"Filter by agent ID\"),\n status: z\n .enum([\"processing\", \"processed\", \"failed\"])\n .optional()\n .describe(\"Filter by processing status\"),\n limit: z\n .number()\n .int()\n .min(1)\n .max(100)\n .optional()\n .describe(\"Number of entries to return (default: 50)\"),\n offset: z\n .number()\n .int()\n .min(0)\n .optional()\n .describe(\"Offset for pagination (default: 0)\"),\n },\n async ({ dataset, agent_id, status, limit, offset }) => {\n try {\n const params = new URLSearchParams();\n if (dataset) params.set(\"dataset\", dataset);\n if (agent_id !== undefined) params.set(\"agent_id\", String(agent_id));\n if (status) params.set(\"status\", status);\n if (limit !== undefined) params.set(\"limit\", String(limit));\n if (offset !== undefined) params.set(\"offset\", String(offset));\n const qs = params.toString();\n const path = `${client.pathPrefix}/ext/datasets/intelligence${qs ? `?${qs}` : \"\"}`;\n const data = await client.get(path);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { readFile } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\n\nconst SUPPORTED_EXTENSIONS = [\n \".pdf\",\n \".docx\",\n \".txt\",\n \".md\",\n \".html\",\n \".csv\",\n \".json\",\n \".jsonl\",\n \".tsv\",\n \".xlsx\",\n \".xls\",\n \".parquet\",\n \".xml\",\n];\n\nexport function registerFileTools(\n server: McpServer,\n client: InflectivClient,\n) {\n server.tool(\n \"inflectiv_list_files\",\n \"List files (knowledge sources) in the dataset. Free.\",\n {\n skip: z\n .number()\n .int()\n .min(0)\n .optional()\n .describe(\"Number of files to skip (default: 0)\"),\n limit: z\n .number()\n .int()\n .min(1)\n .max(100)\n .optional()\n .describe(\"Number of files to return (default: 50)\"),\n dataset: z\n .string()\n .optional()\n .describe(\"Dataset ID or api_name (required for global API keys)\"),\n },\n async ({ skip, limit, dataset }) => {\n try {\n const params = new URLSearchParams();\n if (skip !== undefined) params.set(\"skip\", String(skip));\n if (limit !== undefined) params.set(\"limit\", String(limit));\n if (dataset) params.set(\"dataset\", dataset);\n const qs = params.toString();\n const path = `${client.pathPrefix}/ext/files/${qs ? `?${qs}` : \"\"}`;\n const data = await client.get(path);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_get_file\",\n \"Get details of a specific file (knowledge source). Free.\",\n {\n file_id: z.number().int().describe(\"File ID\"),\n },\n async ({ file_id }) => {\n try {\n const data = await client.get(`${client.pathPrefix}/ext/files/${file_id}`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_upload_file\",\n `Upload a local file to the dataset as a knowledge source. Costs 5 credits base + 1/MB over 5MB. Supported formats: ${SUPPORTED_EXTENSIONS.join(\", \")}`,\n {\n file_path: z\n .string()\n .describe(\"Absolute path to the local file to upload\"),\n title: z\n .string()\n .max(255)\n .optional()\n .describe(\"Display title for the file\"),\n dataset: z\n .string()\n .optional()\n .describe(\"Dataset ID or api_name (required for global API keys)\"),\n },\n async ({ file_path, title, dataset }) => {\n try {\n const ext = \".\" + file_path.split(\".\").pop()?.toLowerCase();\n if (!SUPPORTED_EXTENSIONS.includes(ext)) {\n return {\n content: [\n {\n type: \"text\",\n text: `Unsupported file type \"${ext}\". Supported: ${SUPPORTED_EXTENSIONS.join(\", \")}`,\n },\n ],\n isError: true as const,\n };\n }\n\n const fileBuffer = await readFile(file_path);\n const filename = basename(file_path);\n const data = await client.uploadFile(\n `${client.pathPrefix}/ext/files/upload`,\n fileBuffer,\n filename,\n title,\n dataset,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_reprocess_file\",\n \"Reprocess a previously uploaded file. Useful after processing failures. Costs 5 credits.\",\n {\n file_id: z.number().int().describe(\"File ID to reprocess\"),\n },\n async ({ file_id }) => {\n try {\n const data = await client.post(`${client.pathPrefix}/ext/files/${file_id}/reprocess`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\n\nexport function registerKnowledgeSourceTools(\n server: McpServer,\n client: InflectivClient,\n) {\n server.tool(\n \"inflectiv_list_knowledge_sources\",\n \"List ALL knowledge sources in the dataset (files, URLs, manual text, AI-generated, etc.). Free.\",\n {\n source_type: z\n .enum([\n \"file\",\n \"url\",\n \"manual\",\n \"ai_generated\",\n \"agent_text\",\n \"agent_url\",\n \"token_pair\",\n ])\n .optional()\n .describe(\"Filter by source type\"),\n status: z\n .enum([\"processing\", \"processed\", \"failed\"])\n .optional()\n .describe(\"Filter by processing status\"),\n skip: z\n .number()\n .int()\n .min(0)\n .optional()\n .describe(\"Number of items to skip (default: 0)\"),\n limit: z\n .number()\n .int()\n .min(1)\n .max(100)\n .optional()\n .describe(\"Number of items to return (default: 50)\"),\n dataset: z.string().optional().describe(\"Dataset ID or api_name (required for global API keys)\"),\n },\n async ({ source_type, status, skip, limit, dataset }) => {\n try {\n const params = new URLSearchParams();\n if (source_type) params.set(\"source_type\", source_type);\n if (status) params.set(\"status\", status);\n if (skip !== undefined) params.set(\"skip\", String(skip));\n if (limit !== undefined) params.set(\"limit\", String(limit));\n if (dataset) params.set(\"dataset\", dataset);\n const qs = params.toString();\n const path = `${client.pathPrefix}/ext/knowledge-sources/${qs ? `?${qs}` : \"\"}`;\n const data = await client.get(path);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport type { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\n\nexport function registerMarketplaceTools(server: McpServer, client: InflectivClient): void {\n server.tool(\n \"inflectiv_browse_skill_marketplace\",\n \"Browse published skill marketplace listings. Free. Supports search, tag filtering, price filtering, and sorting.\",\n {\n query: z.string().max(200).optional().describe(\"Search query\"),\n tags: z.array(z.string()).max(10).optional().describe(\"Filter by tags\"),\n price_type: z.enum([\"free\", \"one_time\"]).optional().describe(\"Filter by price type\"),\n sort_by: z\n .enum([\"newest\", \"popular\", \"highest_rated\", \"price_low\", \"price_high\"])\n .optional()\n .describe(\"Sort order (default: newest)\"),\n platform: z.string().optional().describe(\"Filter by platform (evm, dogecoin)\"),\n skip: z.number().int().min(0).optional().describe(\"Pagination offset\"),\n limit: z.number().int().min(1).max(100).optional().describe(\"Pagination limit (default: 20)\"),\n },\n async (params) => {\n try {\n const searchParams = new URLSearchParams();\n if (params.query) searchParams.set(\"query\", params.query);\n if (params.tags) params.tags.forEach((t) => searchParams.append(\"tags\", t));\n if (params.price_type) searchParams.set(\"price_type\", params.price_type);\n if (params.sort_by) searchParams.set(\"sort_by\", params.sort_by);\n if (params.platform) searchParams.set(\"platform\", params.platform);\n if (params.skip !== undefined) searchParams.set(\"skip\", String(params.skip));\n if (params.limit !== undefined) searchParams.set(\"limit\", String(params.limit));\n\n const qs = searchParams.toString();\n const path = `${client.pathPrefix}/skill-marketplace/listings${qs ? `?${qs}` : \"\"}`;\n const data = await client.get(path);\n\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_get_skill_listing\",\n \"Get detailed information about a skill marketplace listing. Free.\",\n {\n listing_id: z.number().describe(\"Skill listing ID\"),\n },\n async (params) => {\n try {\n const data = await client.get(\n `${client.pathPrefix}/skill-marketplace/listings/${params.listing_id}`,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_acquire_skill\",\n \"Acquire a skill from the marketplace. Free skills cost nothing. Paid skills deduct credits.\",\n {\n listing_id: z.number().describe(\"Skill listing ID to acquire\"),\n },\n async (params) => {\n try {\n const data = await client.post(\n `${client.pathPrefix}/ext/skills/acquire-listing/${params.listing_id}`,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_browse_dataset_marketplace\",\n \"Browse published dataset marketplace listings. Free. No auth required.\",\n {\n query: z.string().max(200).optional().describe(\"Search query\"),\n tags: z.array(z.string()).max(10).optional().describe(\"Filter by tags\"),\n sort_by: z\n .enum([\"newest\", \"popular\", \"highest_rated\", \"price_low\", \"price_high\"])\n .optional()\n .describe(\"Sort order\"),\n skip: z.number().int().min(0).optional().describe(\"Pagination offset\"),\n limit: z.number().int().min(1).max(100).optional().describe(\"Pagination limit\"),\n },\n async (params) => {\n try {\n const searchParams = new URLSearchParams();\n if (params.query) searchParams.set(\"query\", params.query);\n if (params.tags) params.tags.forEach((t) => searchParams.append(\"tags\", t));\n if (params.sort_by) searchParams.set(\"sort_by\", params.sort_by);\n if (params.skip !== undefined) searchParams.set(\"skip\", String(params.skip));\n if (params.limit !== undefined) searchParams.set(\"limit\", String(params.limit));\n\n const qs = searchParams.toString();\n const path = `${client.pathPrefix}/marketplace/listings${qs ? `?${qs}` : \"\"}`;\n const data = await client.get(path);\n\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_browse_agent_marketplace\",\n \"Browse published agent marketplace listings. Free. No auth required.\",\n {\n query: z.string().max(200).optional().describe(\"Search query\"),\n tags: z.array(z.string()).max(10).optional().describe(\"Filter by tags\"),\n sort_by: z\n .enum([\"newest\", \"popular\", \"highest_rated\", \"price_low\", \"price_high\"])\n .optional()\n .describe(\"Sort order\"),\n platform: z.string().optional().describe(\"Filter by platform\"),\n skip: z.number().int().min(0).optional().describe(\"Pagination offset\"),\n limit: z.number().int().min(1).max(100).optional().describe(\"Pagination limit\"),\n },\n async (params) => {\n try {\n const searchParams = new URLSearchParams();\n if (params.query) searchParams.set(\"query\", params.query);\n if (params.tags) params.tags.forEach((t) => searchParams.append(\"tags\", t));\n if (params.sort_by) searchParams.set(\"sort_by\", params.sort_by);\n if (params.platform) searchParams.set(\"platform\", params.platform);\n if (params.skip !== undefined) searchParams.set(\"skip\", String(params.skip));\n if (params.limit !== undefined) searchParams.set(\"limit\", String(params.limit));\n\n const qs = searchParams.toString();\n const path = `${client.pathPrefix}/agent-marketplace/listings${qs ? `?${qs}` : \"\"}`;\n const data = await client.get(path);\n\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { ProjectConfig } from \"./types.js\";\n\nconst PROJECT_MARKERS = [\n \".git\",\n \"package.json\",\n \"pyproject.toml\",\n \"Cargo.toml\",\n \"go.mod\",\n \"pom.xml\",\n \"build.gradle\",\n \"Makefile\",\n];\n\nconst INFLECTIV_DIR = \".inflectiv\";\nconst MEMORY_DIR = \"memory\";\nconst CONFIG_FILE = \"config.json\";\nconst ENTRIES_FILE = \"entries.jsonl\";\nconst INDEX_FILE = \"index.json\";\n\nexport function findProjectRoot(startDir?: string): string {\n let dir = startDir ?? process.cwd();\n const root = path.parse(dir).root;\n\n while (dir !== root) {\n for (const marker of PROJECT_MARKERS) {\n if (fs.existsSync(path.join(dir, marker))) {\n return dir;\n }\n }\n dir = path.dirname(dir);\n }\n\n return startDir ?? process.cwd();\n}\n\nexport function getInflectivDir(projectRoot: string): string {\n return path.join(projectRoot, INFLECTIV_DIR);\n}\n\nexport function getMemoryDir(projectRoot: string): string {\n return path.join(projectRoot, INFLECTIV_DIR, MEMORY_DIR);\n}\n\nexport function getConfigPath(projectRoot: string): string {\n return path.join(projectRoot, INFLECTIV_DIR, CONFIG_FILE);\n}\n\nexport function getEntriesPath(projectRoot: string): string {\n return path.join(projectRoot, INFLECTIV_DIR, MEMORY_DIR, ENTRIES_FILE);\n}\n\nexport function getIndexPath(projectRoot: string): string {\n return path.join(projectRoot, INFLECTIV_DIR, MEMORY_DIR, INDEX_FILE);\n}\n\nfunction generateProjectId(): string {\n const chars = \"abcdefghijklmnopqrstuvwxyz0123456789\";\n let result = \"\";\n for (let i = 0; i < 8; i++) {\n result += chars[Math.floor(Math.random() * chars.length)];\n }\n return result;\n}\n\nexport function ensureProjectStructure(projectRoot: string): ProjectConfig {\n const configPath = getConfigPath(projectRoot);\n\n if (fs.existsSync(configPath)) {\n return JSON.parse(fs.readFileSync(configPath, \"utf-8\")) as ProjectConfig;\n }\n\n const memoryDir = getMemoryDir(projectRoot);\n fs.mkdirSync(memoryDir, { recursive: true });\n\n const config: ProjectConfig = {\n project_id: generateProjectId(),\n project_name: path.basename(projectRoot),\n created_at: new Date().toISOString(),\n memory_count: 0,\n };\n\n fs.writeFileSync(configPath, JSON.stringify(config, null, 2));\n fs.writeFileSync(getEntriesPath(projectRoot), \"\");\n fs.writeFileSync(\n getIndexPath(projectRoot),\n JSON.stringify({ version: 1, tag_index: {}, category_index: {}, word_index: {} }),\n );\n\n return config;\n}\n","import * as fs from \"node:fs\";\nimport type { Importance, MemoryCategory, MemoryEntry, MemoryIndex, ProjectConfig } from \"./types.js\";\nimport {\n ensureProjectStructure,\n findProjectRoot,\n getConfigPath,\n getEntriesPath,\n getIndexPath,\n} from \"./project-context.js\";\n\nconst MAX_CONTENT_LENGTH = 10_000;\nconst MAX_TAGS = 10;\n\nfunction generateId(): string {\n const chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n let result = \"\";\n for (let i = 0; i < 8; i++) {\n result += chars[Math.floor(Math.random() * chars.length)];\n }\n return result;\n}\n\nfunction tokenize(text: string): string[] {\n return text\n .toLowerCase()\n .replace(/[^a-z0-9\\s]/g, \" \")\n .split(/\\s+/)\n .filter((w) => w.length > 2);\n}\n\nexport class MemoryStore {\n private projectRoot: string;\n private config: ProjectConfig;\n\n constructor(startDir?: string) {\n this.projectRoot = findProjectRoot(startDir);\n this.config = ensureProjectStructure(this.projectRoot);\n }\n\n get root(): string {\n return this.projectRoot;\n }\n\n get projectName(): string {\n return this.config.project_name;\n }\n\n get projectId(): string {\n return this.config.project_id;\n }\n\n get memoryCount(): number {\n return this.config.memory_count;\n }\n\n write(\n content: string,\n category: MemoryCategory,\n tags: string[] = [],\n importance: Importance = \"medium\",\n sourceContext?: string,\n ): MemoryEntry {\n if (content.length > MAX_CONTENT_LENGTH) {\n throw new Error(`Content exceeds maximum length of ${MAX_CONTENT_LENGTH} characters`);\n }\n if (tags.length > MAX_TAGS) {\n throw new Error(`Maximum ${MAX_TAGS} tags allowed`);\n }\n\n const now = new Date().toISOString();\n const entry: MemoryEntry = {\n id: generateId(),\n content,\n category,\n tags: tags.map((t) => t.toLowerCase().trim()),\n importance,\n created_at: now,\n updated_at: now,\n source_context: sourceContext,\n };\n\n const entriesPath = getEntriesPath(this.projectRoot);\n fs.appendFileSync(entriesPath, JSON.stringify(entry) + \"\\n\");\n\n this.addToIndex(entry);\n this.config.memory_count++;\n this.saveConfig();\n\n return entry;\n }\n\n list(\n category?: MemoryCategory,\n tags?: string[],\n importance?: Importance,\n limit = 20,\n offset = 0,\n ): { entries: MemoryEntry[]; total: number } {\n let entries = this.readAllEntries();\n\n if (category) {\n entries = entries.filter((e) => e.category === category);\n }\n if (tags && tags.length > 0) {\n const lowerTags = tags.map((t) => t.toLowerCase());\n entries = entries.filter((e) => lowerTags.some((t) => e.tags.includes(t)));\n }\n if (importance) {\n entries = entries.filter((e) => e.importance === importance);\n }\n\n entries.sort((a, b) => b.created_at.localeCompare(a.created_at));\n const total = entries.length;\n\n return {\n entries: entries.slice(offset, offset + limit),\n total,\n };\n }\n\n search(\n query: string,\n category?: MemoryCategory,\n limit = 10,\n ): MemoryEntry[] {\n const index = this.readIndex();\n const queryTokens = tokenize(query);\n\n if (queryTokens.length === 0) {\n return this.list(category, undefined, undefined, limit).entries;\n }\n\n const scores = new Map<string, number>();\n for (const token of queryTokens) {\n const ids = index.word_index[token] ?? [];\n for (const id of ids) {\n scores.set(id, (scores.get(id) ?? 0) + 1);\n }\n }\n\n let entries = this.readAllEntries();\n if (category) {\n entries = entries.filter((e) => e.category === category);\n }\n\n const entryMap = new Map(entries.map((e) => [e.id, e]));\n\n return Array.from(scores.entries())\n .filter(([id]) => entryMap.has(id))\n .sort((a, b) => {\n if (b[1] !== a[1]) return b[1] - a[1];\n const ea = entryMap.get(a[0])!;\n const eb = entryMap.get(b[0])!;\n return eb.created_at.localeCompare(ea.created_at);\n })\n .slice(0, limit)\n .map(([id]) => entryMap.get(id)!)\n .filter(Boolean);\n }\n\n delete(memoryId: string): boolean {\n const entries = this.readAllEntries();\n const filtered = entries.filter((e) => e.id !== memoryId);\n\n if (filtered.length === entries.length) {\n return false;\n }\n\n const entriesPath = getEntriesPath(this.projectRoot);\n fs.writeFileSync(entriesPath, filtered.map((e) => JSON.stringify(e)).join(\"\\n\") + (filtered.length > 0 ? \"\\n\" : \"\"));\n\n this.rebuildIndex(filtered);\n this.config.memory_count = filtered.length;\n this.saveConfig();\n\n return true;\n }\n\n suggestSkillCreation(): {\n memory_count: number;\n category_breakdown: Record<string, number>;\n coverage_analysis: string[];\n recommendation: string;\n ready: boolean;\n } {\n const entries = this.readAllEntries();\n const breakdown: Record<string, number> = {};\n for (const entry of entries) {\n breakdown[entry.category] = (breakdown[entry.category] ?? 0) + 1;\n }\n\n const coverage: string[] = [];\n const highImportance = entries.filter((e) => e.importance === \"high\").length;\n\n if (entries.length >= 10) coverage.push(\"Sufficient memory volume (10+)\");\n else coverage.push(`Low memory volume (${entries.length}/10 minimum recommended)`);\n\n if (Object.keys(breakdown).length >= 3) coverage.push(\"Good category diversity\");\n else coverage.push(\"Limited category diversity - consider adding more categories\");\n\n if (highImportance >= 3) coverage.push(\"Has high-importance entries for core knowledge\");\n else coverage.push(\"Few high-importance entries - mark key decisions as high importance\");\n\n const hasDocs = entries.some(\n (e) => e.category === \"architecture\" || e.category === \"convention\" || e.category === \"workflow\",\n );\n if (hasDocs) coverage.push(\"Contains structural knowledge (architecture/conventions/workflows)\");\n else coverage.push(\"Missing structural knowledge - add architecture or convention entries\");\n\n const ready = entries.length >= 5 && Object.keys(breakdown).length >= 2;\n const recommendation = ready\n ? \"Your memories are ready for skill creation. Use inflectiv_create_skill to synthesize them into a reusable skill document.\"\n : \"Continue accumulating memories across more categories before creating a skill.\";\n\n return {\n memory_count: entries.length,\n category_breakdown: breakdown,\n coverage_analysis: coverage,\n recommendation,\n ready,\n };\n }\n\n getConfig(): ProjectConfig {\n return { ...this.config };\n }\n\n updateSyncTime(): void {\n this.config.last_sync_at = new Date().toISOString();\n this.saveConfig();\n }\n\n readAllEntries(): MemoryEntry[] {\n const entriesPath = getEntriesPath(this.projectRoot);\n if (!fs.existsSync(entriesPath)) return [];\n\n const content = fs.readFileSync(entriesPath, \"utf-8\").trim();\n if (!content) return [];\n\n return content\n .split(\"\\n\")\n .filter(Boolean)\n .map((line) => JSON.parse(line) as MemoryEntry);\n }\n\n private readIndex(): MemoryIndex {\n const indexPath = getIndexPath(this.projectRoot);\n if (!fs.existsSync(indexPath)) {\n return { version: 1, tag_index: {}, category_index: {}, word_index: {} };\n }\n return JSON.parse(fs.readFileSync(indexPath, \"utf-8\")) as MemoryIndex;\n }\n\n private addToIndex(entry: MemoryEntry): void {\n const index = this.readIndex();\n\n for (const tag of entry.tags) {\n if (!index.tag_index[tag]) index.tag_index[tag] = [];\n index.tag_index[tag].push(entry.id);\n }\n\n if (!index.category_index[entry.category]) index.category_index[entry.category] = [];\n index.category_index[entry.category].push(entry.id);\n\n const words = tokenize(entry.content);\n for (const word of words) {\n if (!index.word_index[word]) index.word_index[word] = [];\n if (!index.word_index[word].includes(entry.id)) {\n index.word_index[word].push(entry.id);\n }\n }\n\n fs.writeFileSync(getIndexPath(this.projectRoot), JSON.stringify(index));\n }\n\n private rebuildIndex(entries: MemoryEntry[]): void {\n const index: MemoryIndex = { version: 1, tag_index: {}, category_index: {}, word_index: {} };\n\n for (const entry of entries) {\n for (const tag of entry.tags) {\n if (!index.tag_index[tag]) index.tag_index[tag] = [];\n index.tag_index[tag].push(entry.id);\n }\n\n if (!index.category_index[entry.category]) index.category_index[entry.category] = [];\n index.category_index[entry.category].push(entry.id);\n\n const words = tokenize(entry.content);\n for (const word of words) {\n if (!index.word_index[word]) index.word_index[word] = [];\n if (!index.word_index[word].includes(entry.id)) {\n index.word_index[word].push(entry.id);\n }\n }\n }\n\n fs.writeFileSync(getIndexPath(this.projectRoot), JSON.stringify(index));\n }\n\n private saveConfig(): void {\n const configPath = getConfigPath(this.projectRoot);\n fs.writeFileSync(configPath, JSON.stringify(this.config, null, 2));\n }\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport type { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\nimport { MemoryStore } from \"../memory/memory-store.js\";\n\nexport function registerSkillTools(server: McpServer, client: InflectivClient): void {\n server.tool(\n \"inflectiv_create_skill\",\n \"Synthesize local memories into a reusable skill document and upload to Inflectiv. Costs 5 credits. Requires a global API key (inf_global_*).\",\n {\n name: z.string().min(1).max(255).describe(\"Skill name\"),\n description: z.string().max(1000).optional().describe(\"Skill description\"),\n domain: z.string().max(100).optional().describe(\"Domain (e.g., 'react', 'python', 'devops')\"),\n tags: z.array(z.string()).max(20).optional().describe(\"Tags for discovery\"),\n synthesized_content: z\n .string()\n .min(10)\n .max(100000)\n .describe(\"The synthesized skill document (Markdown). The agent should compose this from local memories.\"),\n create_dataset: z.boolean().optional().describe(\"Create a backing dataset for RAG (default: true)\"),\n memory_ids: z.array(z.string()).optional().describe(\"Specific memory IDs to include (default: all)\"),\n agent_id: z.number().optional().describe(\"Auto-attach skill to this agent\"),\n },\n async (params) => {\n try {\n // Read local memories to include in the request\n let memories: Array<Record<string, unknown>> = [];\n try {\n const store = new MemoryStore();\n let entries = store.readAllEntries();\n if (params.memory_ids && params.memory_ids.length > 0) {\n const ids = new Set(params.memory_ids);\n entries = entries.filter((e) => ids.has(e.id));\n }\n memories = entries.map((e) => ({\n content: e.content,\n category: e.category,\n tags: e.tags,\n importance: e.importance,\n source_context: e.source_context,\n }));\n } catch {\n // No local memories available, proceed without\n }\n\n const body: Record<string, unknown> = {\n name: params.name,\n synthesized_content: params.synthesized_content,\n create_dataset: params.create_dataset ?? true,\n memories,\n };\n if (params.description) body.description = params.description;\n if (params.domain) body.domain = params.domain;\n if (params.tags) body.tags = params.tags;\n if (params.agent_id) body.agent_id = params.agent_id;\n\n try {\n const store = new MemoryStore();\n body.source_project_name = store.projectName;\n } catch {\n // ignore\n }\n\n const data = await client.post(`${client.pathPrefix}/ext/skills/create`, body);\n\n // Update local sync time\n try {\n const store = new MemoryStore();\n store.updateSyncTime();\n } catch {\n // ignore\n }\n\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_apply_skill\",\n \"Apply a skill to an agent. Injects the skill document into the agent's system prompt and optionally attaches the skill's dataset. Costs 2 credits.\",\n {\n skill_id: z.number().describe(\"Skill ID to apply\"),\n agent_id: z.number().describe(\"Agent ID to apply the skill to\"),\n inject_as_prompt: z.boolean().optional().describe(\"Inject skill as system prompt context (default: true)\"),\n attach_dataset: z.boolean().optional().describe(\"Attach skill's dataset for RAG (default: true)\"),\n },\n async (params) => {\n try {\n const data = await client.post(\n `${client.pathPrefix}/ext/skills/${params.skill_id}/apply`,\n {\n agent_id: params.agent_id,\n inject_as_prompt: params.inject_as_prompt ?? true,\n attach_dataset: params.attach_dataset ?? true,\n },\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_list_skills\",\n \"List your skills (owned and acquired). Free.\",\n {},\n async () => {\n try {\n const data = await client.get(`${client.pathPrefix}/ext/skills/`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_scan_skill_security\",\n \"Preview security scan on skill content before creating. Runs passes 1-4 (secrets, PII, prompt injection, metadata) and returns findings WITHOUT spending credits. Free.\",\n {\n synthesized_content: z\n .string()\n .min(1)\n .max(100000)\n .describe(\"The skill content to scan\"),\n },\n async (params) => {\n try {\n const data = await client.post(\n `${client.pathPrefix}/ext/skills/scan-security`,\n { synthesized_content: params.synthesized_content },\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_use_skill\",\n \"Load a skill's content into the current Claude Code session. For free/owned skills, content can also be installed permanently. For paid acquired skills, content is loaded ephemerally (session-only, not saved to disk). Free — no credits.\",\n {\n skill_id: z.number().describe(\"Skill ID to use\"),\n },\n async (params) => {\n try {\n const data = await client.get<{\n name: string;\n content: string;\n access_type: string;\n can_persist: boolean;\n }>(`${client.pathPrefix}/ext/skills/${params.skill_id}/use`);\n\n let instructions = `# Skill: ${data.name}\\n\\n${data.content}`;\n if (!data.can_persist) {\n instructions +=\n \"\\n\\n---\\n_This is a paid skill. Content is for this session only and must not be saved to disk or redistributed._\";\n } else {\n instructions +=\n `\\n\\n---\\n_This skill can be permanently installed using \\`inflectiv_install_skill\\` (skill_id: ${params.skill_id})._`;\n }\n\n return {\n content: [{ type: \"text\" as const, text: instructions }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_install_skill\",\n \"Install a skill as a Claude Code slash command (.claude/commands/<name>.md). Only works for owned or free acquired skills — paid skills cannot be installed locally to protect creator IP. Free — no credits.\",\n {\n skill_id: z.number().describe(\"Skill ID to install\"),\n command_name: z\n .string()\n .max(50)\n .optional()\n .describe(\"Custom slash command name (default: skill name slugified)\"),\n },\n async (params) => {\n try {\n const data = await client.get<{\n name: string;\n content: string;\n can_persist: boolean;\n }>(`${client.pathPrefix}/ext/skills/${params.skill_id}/use`);\n\n if (!data.can_persist) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"Cannot install this skill locally — it is a paid acquired skill. Use `inflectiv_use_skill` to load it ephemerally for this session instead.\",\n },\n ],\n };\n }\n\n const cmdName =\n params.command_name ||\n data.name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-|-$/g, \"\");\n\n let projectRoot: string;\n try {\n const store = new MemoryStore();\n projectRoot = store.root;\n } catch {\n projectRoot = process.cwd();\n }\n\n const commandsDir = path.join(projectRoot, \".claude\", \"commands\");\n if (!fs.existsSync(commandsDir)) {\n fs.mkdirSync(commandsDir, { recursive: true });\n }\n\n const filePath = path.join(commandsDir, `${cmdName}.md`);\n fs.writeFileSync(filePath, data.content);\n\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Skill installed as Claude Code command: /${cmdName}\\n\\nFile: ${filePath}\\n\\nYou can now use /${cmdName} in any Claude Code session in this project.`,\n },\n ],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { InflectivClient } from \"../client.js\";\nimport { formatError } from \"../errors.js\";\n\nconst VALID_EVENTS = [\n \"intelligence.processed\",\n \"intelligence.failed\",\n \"intelligence.deduped\",\n \"dataset.mode_changed\",\n] as const;\n\nexport function registerWebhookTools(\n server: McpServer,\n client: InflectivClient,\n) {\n server.tool(\n \"inflectiv_register_webhook\",\n `Register a webhook to receive event notifications. URL must use HTTPS. Valid events: ${VALID_EVENTS.join(\", \")}. Max 10 webhooks per user. Free.`,\n {\n url: z\n .string()\n .url()\n .startsWith(\"https://\", \"Webhook URL must use HTTPS\")\n .min(10)\n .max(2000)\n .describe(\"HTTPS webhook endpoint URL\"),\n events: z\n .array(z.enum(VALID_EVENTS))\n .min(1)\n .describe(\"Events to subscribe to\"),\n description: z\n .string()\n .max(500)\n .optional()\n .describe(\"Webhook description\"),\n },\n async (params) => {\n try {\n const data = await client.post(`${client.pathPrefix}/ext/webhooks/`, params);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_list_webhooks\",\n \"List all registered webhooks. Free.\",\n {},\n async () => {\n try {\n const data = await client.get(`${client.pathPrefix}/ext/webhooks/`);\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n\n server.tool(\n \"inflectiv_test_webhook\",\n \"Send a test event to a registered webhook to verify it's receiving payloads. Free.\",\n {\n webhook_id: z.number().int().describe(\"Webhook ID to test\"),\n },\n async ({ webhook_id }) => {\n try {\n const data = await client.post(\n `${client.pathPrefix}/ext/webhooks/${webhook_id}/test`,\n );\n return {\n content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }],\n };\n } catch (err) {\n return formatError(err);\n }\n },\n );\n}\n","export type MemoryCategory =\n | \"decision\"\n | \"constraint\"\n | \"workflow\"\n | \"architecture\"\n | \"gotcha\"\n | \"preference\"\n | \"convention\"\n | \"dependency\"\n | \"todo\"\n | \"general\";\n\nexport const MEMORY_CATEGORIES: MemoryCategory[] = [\n \"decision\",\n \"constraint\",\n \"workflow\",\n \"architecture\",\n \"gotcha\",\n \"preference\",\n \"convention\",\n \"dependency\",\n \"todo\",\n \"general\",\n];\n\nexport type Importance = \"low\" | \"medium\" | \"high\";\n\nexport interface MemoryEntry {\n id: string;\n content: string;\n category: MemoryCategory;\n tags: string[];\n importance: Importance;\n created_at: string;\n updated_at: string;\n source_context?: string;\n}\n\nexport interface ProjectConfig {\n project_id: string;\n project_name: string;\n created_at: string;\n memory_count: number;\n last_sync_at?: string;\n}\n\nexport interface MemoryIndex {\n version: 1;\n tag_index: Record<string, string[]>;\n category_index: Record<string, string[]>;\n word_index: Record<string, string[]>;\n}\n","import type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { MemoryStore } from \"../memory/memory-store.js\";\nimport { MEMORY_CATEGORIES } from \"../memory/types.js\";\n\nlet store: MemoryStore | null = null;\n\nfunction getStore(): MemoryStore {\n if (!store) {\n store = new MemoryStore();\n }\n return store;\n}\n\nexport function registerMemoryTools(server: McpServer): void {\n server.tool(\n \"inflectiv_write_memory\",\n \"Write a memory entry to the local project memory (.inflectiv/memory/). Free — local only, no API call.\",\n {\n content: z.string().min(1).max(10000).describe(\"Memory content (max 10,000 chars)\"),\n category: z.enum(MEMORY_CATEGORIES as [string, ...string[]]).describe(\n \"Category: decision, constraint, workflow, architecture, gotcha, preference, convention, dependency, todo, general\",\n ),\n tags: z.array(z.string()).max(10).optional().describe(\"Up to 10 tags for filtering\"),\n importance: z.enum([\"low\", \"medium\", \"high\"]).optional().describe(\"Importance level (default: medium)\"),\n source_context: z.string().optional().describe(\"What prompted this memory (file path, topic)\"),\n },\n async (params) => {\n try {\n const s = getStore();\n const entry = s.write(\n params.content,\n params.category as any,\n params.tags ?? [],\n (params.importance as any) ?? \"medium\",\n params.source_context,\n );\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(\n {\n status: \"saved\",\n memory_id: entry.id,\n project: s.projectName,\n total_memories: s.memoryCount,\n category: entry.category,\n tags: entry.tags,\n },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n return {\n content: [{ type: \"text\", text: `Error writing memory: ${err instanceof Error ? err.message : String(err)}` }],\n isError: true,\n };\n }\n },\n );\n\n server.tool(\n \"inflectiv_list_memories\",\n \"List local project memories with optional filters. Free — local only.\",\n {\n category: z.enum(MEMORY_CATEGORIES as [string, ...string[]]).optional().describe(\"Filter by category\"),\n tags: z.array(z.string()).optional().describe(\"Filter by tags (OR match)\"),\n importance: z.enum([\"low\", \"medium\", \"high\"]).optional().describe(\"Filter by importance\"),\n limit: z.number().min(1).max(100).optional().describe(\"Max entries to return (default: 20)\"),\n offset: z.number().min(0).optional().describe(\"Offset for pagination\"),\n },\n async (params) => {\n try {\n const s = getStore();\n const result = s.list(\n params.category as any,\n params.tags,\n params.importance as any,\n params.limit ?? 20,\n params.offset ?? 0,\n );\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(\n {\n project: s.projectName,\n total: result.total,\n returned: result.entries.length,\n entries: result.entries,\n },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n return {\n content: [{ type: \"text\", text: `Error listing memories: ${err instanceof Error ? err.message : String(err)}` }],\n isError: true,\n };\n }\n },\n );\n\n server.tool(\n \"inflectiv_search_memories\",\n \"Keyword search over local project memories. Free — local only.\",\n {\n query: z.string().min(1).describe(\"Search query\"),\n category: z.enum(MEMORY_CATEGORIES as [string, ...string[]]).optional().describe(\"Filter by category\"),\n limit: z.number().min(1).max(50).optional().describe(\"Max results (default: 10)\"),\n },\n async (params) => {\n try {\n const s = getStore();\n const results = s.search(params.query, params.category as any, params.limit ?? 10);\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(\n {\n project: s.projectName,\n query: params.query,\n results_count: results.length,\n results,\n },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n return {\n content: [\n { type: \"text\", text: `Error searching memories: ${err instanceof Error ? err.message : String(err)}` },\n ],\n isError: true,\n };\n }\n },\n );\n\n server.tool(\n \"inflectiv_delete_memory\",\n \"Delete a memory entry by ID. Free — local only.\",\n {\n memory_id: z.string().describe(\"ID of the memory entry to delete\"),\n },\n async (params) => {\n try {\n const s = getStore();\n const deleted = s.delete(params.memory_id);\n if (!deleted) {\n return {\n content: [{ type: \"text\", text: `Memory entry '${params.memory_id}' not found.` }],\n isError: true,\n };\n }\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(\n {\n status: \"deleted\",\n memory_id: params.memory_id,\n remaining_memories: s.memoryCount,\n },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n return {\n content: [\n { type: \"text\", text: `Error deleting memory: ${err instanceof Error ? err.message : String(err)}` },\n ],\n isError: true,\n };\n }\n },\n );\n\n server.tool(\n \"inflectiv_suggest_skill_creation\",\n \"Analyze local memories and recommend if they're ready for skill creation. Free — local only.\",\n {},\n async () => {\n try {\n const s = getStore();\n const analysis = s.suggestSkillCreation();\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(\n { project: s.projectName, ...analysis },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n return {\n content: [{ type: \"text\", text: `Error analyzing memories: ${err instanceof Error ? err.message : String(err)}` }],\n isError: true,\n };\n }\n },\n );\n}\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\n\nexport function registerResources(server: McpServer) {\n server.resource(\n \"docs-overview\",\n \"inflectiv://docs/overview\",\n {\n description: \"Inflectiv API overview — authentication, base URL, credit system\",\n mimeType: \"text/markdown\",\n },\n async () => ({\n contents: [\n {\n uri: \"inflectiv://docs/overview\",\n mimeType: \"text/markdown\",\n text: OVERVIEW_DOC,\n },\n ],\n }),\n );\n\n server.resource(\n \"docs-webhook-events\",\n \"inflectiv://docs/webhook-events\",\n {\n description: \"Webhook event types and payload schemas\",\n mimeType: \"text/markdown\",\n },\n async () => ({\n contents: [\n {\n uri: \"inflectiv://docs/webhook-events\",\n mimeType: \"text/markdown\",\n text: WEBHOOK_EVENTS_DOC,\n },\n ],\n }),\n );\n\n server.resource(\n \"docs-credit-costs\",\n \"inflectiv://docs/credit-costs\",\n {\n description: \"Credit cost table for all API operations\",\n mimeType: \"text/markdown\",\n },\n async () => ({\n contents: [\n {\n uri: \"inflectiv://docs/credit-costs\",\n mimeType: \"text/markdown\",\n text: CREDIT_COSTS_DOC,\n },\n ],\n }),\n );\n}\n\nconst OVERVIEW_DOC = `# Inflectiv API Overview\n\n## Authentication\nAll requests require an API key passed via the \\`X-API-Key\\` header.\nAPI keys have the prefix \\`inf_\\` and are scoped to a single dataset.\n\n## Base URL\nProduction (via Next.js proxy):\n\\`\\`\\`\nhttps://app.inflectiv.ai/api/platform/ext/\n\\`\\`\\`\nLocal development:\n\\`\\`\\`\nhttp://localhost:18001/api/v2/ext/\n\\`\\`\\`\n\n## Concepts\n\n### Agents\nAI chatbots trained on your data. Each agent can have datasets attached for RAG-enabled conversations.\n\n### Datasets\nCollections of knowledge sources (files, intelligence entries) that agents use to answer questions.\nEach API key is scoped to one dataset.\n\n### Intelligence\nProgrammatic knowledge entries written directly to a dataset. Useful for syncing external data.\nDuplicates are automatically detected and cost 0 credits.\n\n### Files\nDocuments uploaded to a dataset. Supported formats: PDF, DOCX, TXT, MD, HTML, CSV, JSON, JSONL, TSV, XLSX, XLS, Parquet, XML.\nFiles are chunked and embedded automatically.\n\n### Webhooks\nHTTPS endpoints that receive event notifications (e.g., when intelligence is processed).\n\n## Credit System\nMost operations cost credits. Free-tier operations include listing resources and managing webhooks.\nSee the credit-costs resource for a full breakdown.\n\n## Getting Started\n1. Get an API key from the Inflectiv dashboard (Settings > API Keys)\n2. Use \\`inflectiv_list_datasets\\` to see your scoped dataset\n3. Use \\`inflectiv_list_agents\\` to see agents attached to the dataset\n4. Upload files or write intelligence to add knowledge\n5. Chat with agents using \\`inflectiv_chat_with_agent\\`\n`;\n\nconst WEBHOOK_EVENTS_DOC = `# Webhook Events\n\n## Available Events\n\n### \\`intelligence.processed\\`\nFired when an intelligence entry has been successfully embedded and indexed.\n\\`\\`\\`json\n{\n \"event\": \"intelligence.processed\",\n \"timestamp\": \"2025-01-01T00:00:00Z\",\n \"data\": {\n \"intelligence_id\": 123,\n \"dataset_id\": 456,\n \"title\": \"Entry title\",\n \"status\": \"processed\"\n }\n}\n\\`\\`\\`\n\n### \\`intelligence.failed\\`\nFired when intelligence processing fails.\n\\`\\`\\`json\n{\n \"event\": \"intelligence.failed\",\n \"timestamp\": \"2025-01-01T00:00:00Z\",\n \"data\": {\n \"intelligence_id\": 123,\n \"dataset_id\": 456,\n \"title\": \"Entry title\",\n \"status\": \"failed\",\n \"error\": \"Processing error message\"\n }\n}\n\\`\\`\\`\n\n### \\`intelligence.deduped\\`\nFired when a duplicate intelligence entry is detected and skipped.\n\\`\\`\\`json\n{\n \"event\": \"intelligence.deduped\",\n \"timestamp\": \"2025-01-01T00:00:00Z\",\n \"data\": {\n \"intelligence_id\": 123,\n \"dataset_id\": 456,\n \"title\": \"Entry title\",\n \"status\": \"deduped\"\n }\n}\n\\`\\`\\`\n\n### \\`dataset.mode_changed\\`\nFired when a dataset's mode is changed on an agent.\n\\`\\`\\`json\n{\n \"event\": \"dataset.mode_changed\",\n \"timestamp\": \"2025-01-01T00:00:00Z\",\n \"data\": {\n \"agent_id\": 789,\n \"dataset_id\": 456,\n \"old_mode\": \"read_only\",\n \"new_mode\": \"self_learning\"\n }\n}\n\\`\\`\\`\n\n## Webhook Security\nEach webhook receives a unique \\`secret\\` upon creation. Use this to verify payload signatures.\nThe secret is only returned once during creation — store it securely.\n`;\n\nconst CREDIT_COSTS_DOC = `# Credit Costs\n\n| Operation | Tool | Credits |\n|-----------|------|---------|\n| List agents | \\`inflectiv_list_agents\\` | Free |\n| Create agent | \\`inflectiv_create_agent\\` | 5 |\n| Get agent | \\`inflectiv_get_agent\\` | Free |\n| Update agent config | \\`inflectiv_update_agent_config\\` | 2 |\n| Chat with agent | \\`inflectiv_chat_with_agent\\` | 1 |\n| List agent datasets | \\`inflectiv_list_agent_datasets\\` | Free |\n| Attach dataset | \\`inflectiv_attach_dataset\\` | Free |\n| Update dataset mode | \\`inflectiv_update_dataset_mode\\` | Free |\n| List datasets | \\`inflectiv_list_datasets\\` | Free |\n| Update dataset | \\`inflectiv_update_dataset\\` | Free |\n| Reindex dataset | \\`inflectiv_reindex_dataset\\` | 2 |\n| Search dataset | \\`inflectiv_search_dataset\\` | 1 |\n| Batch search | \\`inflectiv_batch_search\\` | 1 per query |\n| Write intelligence | \\`inflectiv_write_intelligence\\` | 1 (0 if dup) |\n| Batch write intelligence | \\`inflectiv_batch_write_intelligence\\` | 1 per new entry |\n| List intelligence | \\`inflectiv_list_intelligence\\` | Free |\n| List files | \\`inflectiv_list_files\\` | Free |\n| Get file | \\`inflectiv_get_file\\` | Free |\n| Upload file | \\`inflectiv_upload_file\\` | 5 base + 1/MB over 5MB |\n| Reprocess file | \\`inflectiv_reprocess_file\\` | 5 |\n| Register webhook | \\`inflectiv_register_webhook\\` | Free |\n| List webhooks | \\`inflectiv_list_webhooks\\` | Free |\n| Test webhook | \\`inflectiv_test_webhook\\` | Free |\n`;\n","import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { InflectivClient } from \"./client.js\";\nimport {\n registerAgentTools,\n registerDatasetTools,\n registerFileTools,\n registerKnowledgeSourceTools,\n registerMarketplaceTools,\n registerMemoryTools,\n registerSkillTools,\n registerWebhookTools,\n} from \"./tools/index.js\";\nimport { registerResources } from \"./resources/index.js\";\n\nexport function createServer(): McpServer {\n const apiKey = process.env.INFLECTIV_API_KEY || null;\n const walletKey = process.env.INFLECTIV_WALLET_PRIVATE_KEY;\n\n if (!apiKey && !walletKey) {\n console.error(\n \"Error: Either INFLECTIV_API_KEY or INFLECTIV_WALLET_PRIVATE_KEY is required.\\n\" +\n \"Get your API key from https://app.inflectiv.ai (Settings > API Keys).\\n\" +\n \"Or set INFLECTIV_WALLET_PRIVATE_KEY for X402 crypto payments.\",\n );\n process.exit(1);\n }\n\n const baseUrl = process.env.INFLECTIV_BASE_URL;\n const client = new InflectivClient(apiKey, baseUrl);\n\n const server = new McpServer({\n name: \"inflectiv\",\n version: \"0.1.0\",\n });\n\n registerAgentTools(server, client);\n registerDatasetTools(server, client);\n registerFileTools(server, client);\n registerKnowledgeSourceTools(server, client);\n registerSkillTools(server, client);\n registerMarketplaceTools(server, client);\n registerWebhookTools(server, client);\n registerMemoryTools(server);\n registerResources(server);\n\n return server;\n}\n","import { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { createServer } from \"./server.js\";\n\nasync function main() {\n const server = createServer();\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n\nmain().catch((err) => {\n console.error(\"Fatal error:\", err);\n process.exit(1);\n});\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inf-mcp/mcp-server",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "MCP server for the Inflectiv AI platform — manage agents, datasets,
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"description": "MCP server for the Inflectiv AI platform — manage agents, datasets, skills, marketplace, memories, and files from any MCP-compatible IDE",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"inf-mcp-server": "./dist/index.js"
|