@inf-mcp/mcp-server 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # @inflectiv/mcp-server
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 @inflectiv/mcp-server
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 @inflectiv/mcp-server
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", "@inflectiv/mcp-server"],
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", "@inflectiv/mcp-server"],
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", "@inflectiv/mcp-server"],
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", "@inflectiv/mcp-server"],
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", "@inflectiv/mcp-server"],
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 @inflectiv/mcp-server` with the `INFLECTIV_API_KEY` environment variable set. Works with any MCP-compatible client using stdio transport.
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 (38)
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 (4) — requires API key
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 | 4 | Yes |
247
+ | Skills | 6 | Yes |
246
248
  | Marketplace acquire | 1 | Yes |
247
- | **Subtotal (key required)** | **29** | |
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
@@ -45,8 +45,8 @@ var InflectivClient = class {
45
45
  }
46
46
  return { ...h, ...extra };
47
47
  }
48
- async request(method, path2, body) {
49
- const url = `${this.baseUrl}${path2}`.replace(/\/+$/, "");
48
+ async request(method, path3, body) {
49
+ const url = `${this.baseUrl}${path3}`.replace(/\/+$/, "");
50
50
  const init = {
51
51
  method,
52
52
  headers: this.headers(
@@ -66,29 +66,30 @@ var InflectivClient = class {
66
66
  }
67
67
  return res.json();
68
68
  }
69
- async get(path2) {
70
- return this.request("GET", path2);
69
+ async get(path3) {
70
+ return this.request("GET", path3);
71
71
  }
72
- async post(path2, body) {
73
- return this.request("POST", path2, body);
72
+ async post(path3, body) {
73
+ return this.request("POST", path3, body);
74
74
  }
75
- async put(path2, body) {
76
- return this.request("PUT", path2, body);
75
+ async put(path3, body) {
76
+ return this.request("PUT", path3, body);
77
77
  }
78
- async patch(path2, body) {
79
- return this.request("PATCH", path2, body);
78
+ async patch(path3, body) {
79
+ return this.request("PATCH", path3, body);
80
80
  }
81
- async delete(path2) {
82
- return this.request("DELETE", path2);
81
+ async delete(path3) {
82
+ return this.request("DELETE", path3);
83
83
  }
84
- async uploadFile(path2, fileBuffer, filename, title) {
84
+ async uploadFile(path3, fileBuffer, filename, title, dataset) {
85
85
  const formData = new FormData();
86
86
  const blob = new Blob([fileBuffer]);
87
87
  formData.append("file", blob, filename);
88
88
  if (title) {
89
89
  formData.append("title", title);
90
90
  }
91
- const url = `${this.baseUrl}${path2}`.replace(/\/+$/, "");
91
+ const qs = dataset ? `?dataset=${encodeURIComponent(dataset)}` : "";
92
+ const url = `${this.baseUrl}${path3}${qs}`.replace(/\/+$/, "");
92
93
  const res = await fetch(url, {
93
94
  method: "POST",
94
95
  headers: this.headers(),
@@ -140,7 +141,7 @@ ${issues}`;
140
141
  function registerAgentTools(server, client) {
141
142
  server.tool(
142
143
  "inflectiv_list_agents",
143
- "List all agents owned by you that have the API key's dataset attached. Free.",
144
+ "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
145
  {},
145
146
  async () => {
146
147
  try {
@@ -165,11 +166,13 @@ function registerAgentTools(server, client) {
165
166
  system_instructions: z.string().max(2e3).optional().describe("Custom system instructions for the agent"),
166
167
  response_length: z.string().optional().describe('Response length preference (default: "concise")'),
167
168
  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)")
169
+ temperature: z.number().int().min(0).max(100).optional().describe("Temperature 0-100 (default: 70)"),
170
+ dataset: z.string().optional().describe("Dataset ID or api_name to attach (required for global API keys)")
169
171
  },
170
- async (params) => {
172
+ async ({ dataset, ...body }) => {
171
173
  try {
172
- const data = await client.post(`${client.pathPrefix}/ext/agents/`, params);
174
+ const qs = dataset ? `?dataset=${dataset}` : "";
175
+ const data = await client.post(`${client.pathPrefix}/ext/agents/${qs}`, body);
173
176
  return {
174
177
  content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
175
178
  };
@@ -318,10 +321,15 @@ function registerDatasetTools(server, client) {
318
321
  server.tool(
319
322
  "inflectiv_list_datasets",
320
323
  "List datasets accessible via this API key. Free.",
321
- {},
322
- async () => {
324
+ {
325
+ dataset: z.string().optional().describe(
326
+ "Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)"
327
+ )
328
+ },
329
+ async ({ dataset }) => {
323
330
  try {
324
- const data = await client.get(`${client.pathPrefix}/ext/datasets/`);
331
+ const qs = dataset ? `?dataset=${dataset}` : "";
332
+ const data = await client.get(`${client.pathPrefix}/ext/datasets/${qs}`);
325
333
  return {
326
334
  content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
327
335
  };
@@ -334,12 +342,16 @@ function registerDatasetTools(server, client) {
334
342
  "inflectiv_update_dataset",
335
343
  "Update dataset name and/or description. Only dataset owner can update. Free.",
336
344
  {
345
+ dataset: z.string().optional().describe(
346
+ "Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)"
347
+ ),
337
348
  name: z.string().min(1).max(255).optional().describe("New dataset name"),
338
349
  description: z.string().max(1e3).optional().describe("New dataset description")
339
350
  },
340
- async (params) => {
351
+ async ({ dataset, ...params }) => {
341
352
  try {
342
- const data = await client.put(`${client.pathPrefix}/ext/datasets/`, params);
353
+ const qs = dataset ? `?dataset=${dataset}` : "";
354
+ const data = await client.put(`${client.pathPrefix}/ext/datasets/${qs}`, params);
343
355
  return {
344
356
  content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
345
357
  };
@@ -351,10 +363,15 @@ function registerDatasetTools(server, client) {
351
363
  server.tool(
352
364
  "inflectiv_reindex_dataset",
353
365
  "Reindex dataset vectors. Useful after bulk changes. Costs 2 credits.",
354
- {},
355
- async () => {
366
+ {
367
+ dataset: z.string().optional().describe(
368
+ "Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)"
369
+ )
370
+ },
371
+ async ({ dataset }) => {
356
372
  try {
357
- const data = await client.post(`${client.pathPrefix}/ext/datasets/reindex`);
373
+ const qs = dataset ? `?dataset=${dataset}` : "";
374
+ const data = await client.post(`${client.pathPrefix}/ext/datasets/reindex${qs}`);
358
375
  return {
359
376
  content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
360
377
  };
@@ -367,13 +384,17 @@ function registerDatasetTools(server, client) {
367
384
  "inflectiv_search_dataset",
368
385
  "Semantic search across the dataset's knowledge base. Costs 1 credit.",
369
386
  {
387
+ dataset: z.string().optional().describe(
388
+ "Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)"
389
+ ),
370
390
  query: z.string().min(1).max(2e3).describe("Search query"),
371
391
  top_k: z.number().int().min(1).max(20).optional().describe("Number of results to return (default: 5)"),
372
392
  score_threshold: z.number().min(0).max(1).optional().describe("Minimum similarity score 0.0-1.0 (default: 0.6)")
373
393
  },
374
- async (params) => {
394
+ async ({ dataset, ...params }) => {
375
395
  try {
376
- const data = await client.post(`${client.pathPrefix}/ext/datasets/query`, params);
396
+ const qs = dataset ? `?dataset=${dataset}` : "";
397
+ const data = await client.post(`${client.pathPrefix}/ext/datasets/query${qs}`, params);
377
398
  return {
378
399
  content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
379
400
  };
@@ -386,14 +407,18 @@ function registerDatasetTools(server, client) {
386
407
  "inflectiv_batch_search",
387
408
  "Run multiple semantic searches in a single call. Costs 1 credit per query.",
388
409
  {
410
+ dataset: z.string().optional().describe(
411
+ "Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)"
412
+ ),
389
413
  queries: z.array(z.string()).min(1).max(20).describe("List of search queries (1-20)"),
390
414
  top_k: z.number().int().min(1).max(20).optional().describe("Number of results per query (default: 5)"),
391
415
  score_threshold: z.number().min(0).max(1).optional().describe("Minimum similarity score 0.0-1.0 (default: 0.6)")
392
416
  },
393
- async (params) => {
417
+ async ({ dataset, ...params }) => {
394
418
  try {
419
+ const qs = dataset ? `?dataset=${dataset}` : "";
395
420
  const data = await client.post(
396
- `${client.pathPrefix}/ext/datasets/query/batch`,
421
+ `${client.pathPrefix}/ext/datasets/query/batch${qs}`,
397
422
  params
398
423
  );
399
424
  return {
@@ -408,16 +433,20 @@ function registerDatasetTools(server, client) {
408
433
  "inflectiv_write_intelligence",
409
434
  "Write a single intelligence entry to the dataset. Costs 1 credit (0 if duplicate detected). Content is embedded and becomes searchable.",
410
435
  {
436
+ dataset: z.string().optional().describe(
437
+ "Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)"
438
+ ),
411
439
  agent_id: z.number().int().describe("Agent ID that owns this intelligence"),
412
440
  content: z.string().min(1).max(5e4).describe("Intelligence content text"),
413
441
  title: z.string().max(255).optional().describe("Title for the intelligence entry"),
414
442
  source_type: z.enum(["agent_text", "agent_url"]).optional().describe('Source type (default: "agent_text")'),
415
443
  source_identifier: z.string().max(2e3).optional().describe("Source identifier (e.g. URL)")
416
444
  },
417
- async ({ agent_id, ...body }) => {
445
+ async ({ agent_id, dataset, ...body }) => {
418
446
  try {
447
+ const datasetQs = dataset ? `&dataset=${dataset}` : "";
419
448
  const data = await client.post(
420
- `${client.pathPrefix}/ext/datasets/intelligence?agent_id=${agent_id}`,
449
+ `${client.pathPrefix}/ext/datasets/intelligence?agent_id=${agent_id}${datasetQs}`,
421
450
  body
422
451
  );
423
452
  return {
@@ -432,6 +461,9 @@ function registerDatasetTools(server, client) {
432
461
  "inflectiv_batch_write_intelligence",
433
462
  "Write multiple intelligence entries in a single call. Costs 1 credit per new entry (duplicates are free). Max 50 entries.",
434
463
  {
464
+ dataset: z.string().optional().describe(
465
+ "Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)"
466
+ ),
435
467
  agent_id: z.number().int().describe("Agent ID that owns these intelligence entries"),
436
468
  entries: z.array(
437
469
  z.object({
@@ -442,10 +474,11 @@ function registerDatasetTools(server, client) {
442
474
  })
443
475
  ).min(1).max(50).describe("Intelligence entries to write (1-50)")
444
476
  },
445
- async ({ agent_id, entries }) => {
477
+ async ({ agent_id, dataset, entries }) => {
446
478
  try {
479
+ const datasetQs = dataset ? `&dataset=${dataset}` : "";
447
480
  const data = await client.post(
448
- `${client.pathPrefix}/ext/datasets/intelligence/batch?agent_id=${agent_id}`,
481
+ `${client.pathPrefix}/ext/datasets/intelligence/batch?agent_id=${agent_id}${datasetQs}`,
449
482
  { entries }
450
483
  );
451
484
  return {
@@ -460,21 +493,25 @@ function registerDatasetTools(server, client) {
460
493
  "inflectiv_list_intelligence",
461
494
  "List intelligence entries in the dataset. Free. Filter by agent_id, status, with pagination.",
462
495
  {
496
+ dataset: z.string().optional().describe(
497
+ "Dataset ID or api_name (required for global API keys, optional for dataset-scoped keys)"
498
+ ),
463
499
  agent_id: z.number().int().optional().describe("Filter by agent ID"),
464
500
  status: z.enum(["processing", "processed", "failed"]).optional().describe("Filter by processing status"),
465
501
  limit: z.number().int().min(1).max(100).optional().describe("Number of entries to return (default: 50)"),
466
502
  offset: z.number().int().min(0).optional().describe("Offset for pagination (default: 0)")
467
503
  },
468
- async ({ agent_id, status, limit, offset }) => {
504
+ async ({ dataset, agent_id, status, limit, offset }) => {
469
505
  try {
470
506
  const params = new URLSearchParams();
507
+ if (dataset) params.set("dataset", dataset);
471
508
  if (agent_id !== void 0) params.set("agent_id", String(agent_id));
472
509
  if (status) params.set("status", status);
473
510
  if (limit !== void 0) params.set("limit", String(limit));
474
511
  if (offset !== void 0) params.set("offset", String(offset));
475
512
  const qs = params.toString();
476
- const path2 = `${client.pathPrefix}/ext/datasets/intelligence${qs ? `?${qs}` : ""}`;
477
- const data = await client.get(path2);
513
+ const path3 = `${client.pathPrefix}/ext/datasets/intelligence${qs ? `?${qs}` : ""}`;
514
+ const data = await client.get(path3);
478
515
  return {
479
516
  content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
480
517
  };
@@ -505,16 +542,18 @@ function registerFileTools(server, client) {
505
542
  "List files (knowledge sources) in the dataset. Free.",
506
543
  {
507
544
  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)")
545
+ limit: z.number().int().min(1).max(100).optional().describe("Number of files to return (default: 50)"),
546
+ dataset: z.string().optional().describe("Dataset ID or api_name (required for global API keys)")
509
547
  },
510
- async ({ skip, limit }) => {
548
+ async ({ skip, limit, dataset }) => {
511
549
  try {
512
550
  const params = new URLSearchParams();
513
551
  if (skip !== void 0) params.set("skip", String(skip));
514
552
  if (limit !== void 0) params.set("limit", String(limit));
553
+ if (dataset) params.set("dataset", dataset);
515
554
  const qs = params.toString();
516
- const path2 = `${client.pathPrefix}/ext/files/${qs ? `?${qs}` : ""}`;
517
- const data = await client.get(path2);
555
+ const path3 = `${client.pathPrefix}/ext/files/${qs ? `?${qs}` : ""}`;
556
+ const data = await client.get(path3);
518
557
  return {
519
558
  content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
520
559
  };
@@ -545,9 +584,10 @@ function registerFileTools(server, client) {
545
584
  `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
585
  {
547
586
  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")
587
+ title: z.string().max(255).optional().describe("Display title for the file"),
588
+ dataset: z.string().optional().describe("Dataset ID or api_name (required for global API keys)")
549
589
  },
550
- async ({ file_path, title }) => {
590
+ async ({ file_path, title, dataset }) => {
551
591
  try {
552
592
  const ext = "." + file_path.split(".").pop()?.toLowerCase();
553
593
  if (!SUPPORTED_EXTENSIONS.includes(ext)) {
@@ -567,7 +607,8 @@ function registerFileTools(server, client) {
567
607
  `${client.pathPrefix}/ext/files/upload`,
568
608
  fileBuffer,
569
609
  filename,
570
- title
610
+ title,
611
+ dataset
571
612
  );
572
613
  return {
573
614
  content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
@@ -611,18 +652,20 @@ function registerKnowledgeSourceTools(server, client) {
611
652
  ]).optional().describe("Filter by source type"),
612
653
  status: z.enum(["processing", "processed", "failed"]).optional().describe("Filter by processing status"),
613
654
  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)")
655
+ limit: z.number().int().min(1).max(100).optional().describe("Number of items to return (default: 50)"),
656
+ dataset: z.string().optional().describe("Dataset ID or api_name (required for global API keys)")
615
657
  },
616
- async ({ source_type, status, skip, limit }) => {
658
+ async ({ source_type, status, skip, limit, dataset }) => {
617
659
  try {
618
660
  const params = new URLSearchParams();
619
661
  if (source_type) params.set("source_type", source_type);
620
662
  if (status) params.set("status", status);
621
663
  if (skip !== void 0) params.set("skip", String(skip));
622
664
  if (limit !== void 0) params.set("limit", String(limit));
665
+ if (dataset) params.set("dataset", dataset);
623
666
  const qs = params.toString();
624
- const path2 = `${client.pathPrefix}/ext/knowledge-sources/${qs ? `?${qs}` : ""}`;
625
- const data = await client.get(path2);
667
+ const path3 = `${client.pathPrefix}/ext/knowledge-sources/${qs ? `?${qs}` : ""}`;
668
+ const data = await client.get(path3);
626
669
  return {
627
670
  content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
628
671
  };
@@ -656,8 +699,8 @@ function registerMarketplaceTools(server, client) {
656
699
  if (params.skip !== void 0) searchParams.set("skip", String(params.skip));
657
700
  if (params.limit !== void 0) searchParams.set("limit", String(params.limit));
658
701
  const qs = searchParams.toString();
659
- const path2 = `${client.pathPrefix}/skill-marketplace/listings${qs ? `?${qs}` : ""}`;
660
- const data = await client.get(path2);
702
+ const path3 = `${client.pathPrefix}/skill-marketplace/listings${qs ? `?${qs}` : ""}`;
703
+ const data = await client.get(path3);
661
704
  return {
662
705
  content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
663
706
  };
@@ -694,7 +737,7 @@ function registerMarketplaceTools(server, client) {
694
737
  async (params) => {
695
738
  try {
696
739
  const data = await client.post(
697
- `${client.pathPrefix}/skill-marketplace/listings/${params.listing_id}/acquire`
740
+ `${client.pathPrefix}/ext/skills/acquire-listing/${params.listing_id}`
698
741
  );
699
742
  return {
700
743
  content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
@@ -723,8 +766,8 @@ function registerMarketplaceTools(server, client) {
723
766
  if (params.skip !== void 0) searchParams.set("skip", String(params.skip));
724
767
  if (params.limit !== void 0) searchParams.set("limit", String(params.limit));
725
768
  const qs = searchParams.toString();
726
- const path2 = `${client.pathPrefix}/marketplace/listings${qs ? `?${qs}` : ""}`;
727
- const data = await client.get(path2);
769
+ const path3 = `${client.pathPrefix}/marketplace/listings${qs ? `?${qs}` : ""}`;
770
+ const data = await client.get(path3);
728
771
  return {
729
772
  content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
730
773
  };
@@ -754,8 +797,8 @@ function registerMarketplaceTools(server, client) {
754
797
  if (params.skip !== void 0) searchParams.set("skip", String(params.skip));
755
798
  if (params.limit !== void 0) searchParams.set("limit", String(params.limit));
756
799
  const qs = searchParams.toString();
757
- const path2 = `${client.pathPrefix}/agent-marketplace/listings${qs ? `?${qs}` : ""}`;
758
- const data = await client.get(path2);
800
+ const path3 = `${client.pathPrefix}/agent-marketplace/listings${qs ? `?${qs}` : ""}`;
801
+ const data = await client.get(path3);
759
802
  return {
760
803
  content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
761
804
  };
@@ -856,6 +899,9 @@ var MemoryStore = class {
856
899
  this.projectRoot = findProjectRoot(startDir);
857
900
  this.config = ensureProjectStructure(this.projectRoot);
858
901
  }
902
+ get root() {
903
+ return this.projectRoot;
904
+ }
859
905
  get projectName() {
860
906
  return this.config.project_name;
861
907
  }
@@ -1164,6 +1210,85 @@ function registerSkillTools(server, client) {
1164
1210
  }
1165
1211
  }
1166
1212
  );
1213
+ server.tool(
1214
+ "inflectiv_use_skill",
1215
+ "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.",
1216
+ {
1217
+ skill_id: z.number().describe("Skill ID to use")
1218
+ },
1219
+ async (params) => {
1220
+ try {
1221
+ const data = await client.get(`${client.pathPrefix}/ext/skills/${params.skill_id}/use`);
1222
+ let instructions = `# Skill: ${data.name}
1223
+
1224
+ ${data.content}`;
1225
+ if (!data.can_persist) {
1226
+ instructions += "\n\n---\n_This is a paid skill. Content is for this session only and must not be saved to disk or redistributed._";
1227
+ } else {
1228
+ instructions += `
1229
+
1230
+ ---
1231
+ _This skill can be permanently installed using \`inflectiv_install_skill\` (skill_id: ${params.skill_id})._`;
1232
+ }
1233
+ return {
1234
+ content: [{ type: "text", text: instructions }]
1235
+ };
1236
+ } catch (err) {
1237
+ return formatError(err);
1238
+ }
1239
+ }
1240
+ );
1241
+ server.tool(
1242
+ "inflectiv_install_skill",
1243
+ "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.",
1244
+ {
1245
+ skill_id: z.number().describe("Skill ID to install"),
1246
+ command_name: z.string().max(50).optional().describe("Custom slash command name (default: skill name slugified)")
1247
+ },
1248
+ async (params) => {
1249
+ try {
1250
+ const data = await client.get(`${client.pathPrefix}/ext/skills/${params.skill_id}/use`);
1251
+ if (!data.can_persist) {
1252
+ return {
1253
+ content: [
1254
+ {
1255
+ type: "text",
1256
+ 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."
1257
+ }
1258
+ ]
1259
+ };
1260
+ }
1261
+ const cmdName = params.command_name || data.name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
1262
+ let projectRoot;
1263
+ try {
1264
+ const store2 = new MemoryStore();
1265
+ projectRoot = store2.root;
1266
+ } catch {
1267
+ projectRoot = process.cwd();
1268
+ }
1269
+ const commandsDir = path.join(projectRoot, ".claude", "commands");
1270
+ if (!fs2.existsSync(commandsDir)) {
1271
+ fs2.mkdirSync(commandsDir, { recursive: true });
1272
+ }
1273
+ const filePath = path.join(commandsDir, `${cmdName}.md`);
1274
+ fs2.writeFileSync(filePath, data.content);
1275
+ return {
1276
+ content: [
1277
+ {
1278
+ type: "text",
1279
+ text: `Skill installed as Claude Code command: /${cmdName}
1280
+
1281
+ File: ${filePath}
1282
+
1283
+ You can now use /${cmdName} in any Claude Code session in this project.`
1284
+ }
1285
+ ]
1286
+ };
1287
+ } catch (err) {
1288
+ return formatError(err);
1289
+ }
1290
+ }
1291
+ );
1167
1292
  }
1168
1293
  var VALID_EVENTS = [
1169
1294
  "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}/skill-marketplace/listings/${params.listing_id}/acquire`,\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 * - 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 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,10 +1,10 @@
1
1
  {
2
2
  "name": "@inf-mcp/mcp-server",
3
- "version": "0.1.0",
4
- "description": "MCP server for the Inflectiv AI platform — manage agents, datasets, files, and webhooks from Claude Desktop or Claude Code",
3
+ "version": "0.2.0",
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
- "inflectiv-mcp-server": "./dist/index.js"
7
+ "inf-mcp-server": "./dist/index.js"
8
8
  },
9
9
  "main": "./dist/index.js",
10
10
  "files": [