@neuranix/mcp-server 1.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 +74 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +54 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +216 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts.d.ts +4 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +65 -0
- package/dist/prompts.js.map +1 -0
- package/dist/resources.d.ts +3 -0
- package/dist/resources.d.ts.map +1 -0
- package/dist/resources.js +29 -0
- package/dist/resources.js.map +1 -0
- package/dist/tools.d.ts +8 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +136 -0
- package/dist/tools.js.map +1 -0
- package/package.json +52 -0
package/README.md
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# @neuranix/mcp-server
|
|
2
|
+
|
|
3
|
+
Plug-in MCP de memória persistente para agentes de IA em IDEs.
|
|
4
|
+
|
|
5
|
+
**Produção:** `https://neuranix.com.br/api/neuranix`
|
|
6
|
+
|
|
7
|
+
## Instalação (Cursor / VS Code / Claude Code)
|
|
8
|
+
|
|
9
|
+
Obtenha a configuração pronta em [neuranix.com.br/neuranix](https://neuranix.com.br/neuranix) ou use:
|
|
10
|
+
|
|
11
|
+
```json
|
|
12
|
+
{
|
|
13
|
+
"mcpServers": {
|
|
14
|
+
"neuranix": {
|
|
15
|
+
"command": "npx",
|
|
16
|
+
"args": ["-y", "@neuranix/mcp-server"],
|
|
17
|
+
"env": {
|
|
18
|
+
"NEURANIX_API_URL": "https://neuranix.com.br/api/neuranix",
|
|
19
|
+
"NEURANIX_API_KEY": "ak_sua_chave_aqui"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Claude Code (recomendado)
|
|
27
|
+
|
|
28
|
+
Use `alwaysLoad: true` para manter a tool sempre visível e adicione o bloco `CLAUDE.md` do dashboard:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
claude mcp add --scope project neuranix \
|
|
32
|
+
--env NEURANIX_API_URL=https://neuranix.com.br/api/neuranix \
|
|
33
|
+
--env NEURANIX_API_KEY=ak_sua_chave \
|
|
34
|
+
-- npx -y @neuranix/mcp-server
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Comandos proativos no Claude Code:
|
|
38
|
+
|
|
39
|
+
| Comando | Uso |
|
|
40
|
+
|---------|-----|
|
|
41
|
+
| `/mcp__neuranix__session_start` | Carregar contexto no início da sessão |
|
|
42
|
+
| `/mcp__neuranix__before_task` | Recall antes de tarefa complexa |
|
|
43
|
+
| `/mcp__neuranix__save_decision` | Gravar decisão importante |
|
|
44
|
+
|
|
45
|
+
## Segurança de domínio
|
|
46
|
+
|
|
47
|
+
Por padrão, o MCP só aceita requisições para hosts autorizados:
|
|
48
|
+
|
|
49
|
+
- `neuranix.com.br` / `www.neuranix.com.br` (HTTPS obrigatório)
|
|
50
|
+
- `localhost` / `127.0.0.1` (desenvolvimento)
|
|
51
|
+
|
|
52
|
+
Para túneis locais (ngrok, etc.) em desenvolvimento:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
NEURANIX_ALLOW_CUSTOM_HOST=true
|
|
56
|
+
NEURANIX_API_URL=https://seu-tunel.ngrok-free.app/api/neuranix
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Variáveis de ambiente
|
|
60
|
+
|
|
61
|
+
| Variável | Descrição |
|
|
62
|
+
|----------|-----------|
|
|
63
|
+
| `NEURANIX_API_URL` | URL base (padrão produção: `https://neuranix.com.br/api/neuranix`) |
|
|
64
|
+
| `NEURANIX_API_KEY` | Chave API (`ak_...`) — **obrigatória** |
|
|
65
|
+
| `NEURANIX_ENV` | `local` para usar `http://127.0.0.1:8000/api/neuranix` |
|
|
66
|
+
| `NEURANIX_ALLOW_CUSTOM_HOST` | `true` para permitir hosts de dev (ngrok) |
|
|
67
|
+
|
|
68
|
+
## Desenvolvimento local
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
npm install
|
|
72
|
+
npm run build
|
|
73
|
+
NEURANIX_ENV=local NEURANIX_API_KEY=ak_... npm start
|
|
74
|
+
```
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const NEURANIX_DOMAIN = "neuranix.com.br";
|
|
2
|
+
export declare const NEURANIX_PRODUCTION_API_URL = "https://neuranix.com.br/api/neuranix";
|
|
3
|
+
export declare const NEURANIX_LOCAL_API_URL = "http://127.0.0.1:8000/api/neuranix";
|
|
4
|
+
export declare const NEURANIX_ALLOWED_HOSTS: Set<string>;
|
|
5
|
+
export declare const MCP_USER_AGENT = "Neuranix-MCP/1.0";
|
|
6
|
+
export declare function resolveApiBaseUrl(): string;
|
|
7
|
+
export declare function validateApiBaseUrl(url: string): string;
|
|
8
|
+
export declare function validateApiKey(apiKey: string): void;
|
|
9
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,oBAAoB,CAAC;AAEjD,eAAO,MAAM,2BAA2B,yCAA4C,CAAC;AAErF,eAAO,MAAM,sBAAsB,uCAAuC,CAAC;AAE3E,eAAO,MAAM,sBAAsB,aAKjC,CAAC;AAEH,eAAO,MAAM,cAAc,qBAAqB,CAAC;AAEjD,wBAAgB,iBAAiB,IAAI,MAAM,CAW1C;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAgCtD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAQnD"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export const NEURANIX_DOMAIN = "neuranix.com.br";
|
|
2
|
+
export const NEURANIX_PRODUCTION_API_URL = `https://${NEURANIX_DOMAIN}/api/neuranix`;
|
|
3
|
+
export const NEURANIX_LOCAL_API_URL = "http://127.0.0.1:8000/api/neuranix";
|
|
4
|
+
export const NEURANIX_ALLOWED_HOSTS = new Set([
|
|
5
|
+
"neuranix.com.br",
|
|
6
|
+
"www.neuranix.com.br",
|
|
7
|
+
"localhost",
|
|
8
|
+
"127.0.0.1",
|
|
9
|
+
]);
|
|
10
|
+
export const MCP_USER_AGENT = "Neuranix-MCP/1.0";
|
|
11
|
+
export function resolveApiBaseUrl() {
|
|
12
|
+
const override = process.env.NEURANIX_API_URL?.trim();
|
|
13
|
+
if (override) {
|
|
14
|
+
return validateApiBaseUrl(override);
|
|
15
|
+
}
|
|
16
|
+
if (process.env.NEURANIX_ENV === "local" || process.env.NODE_ENV === "development") {
|
|
17
|
+
return NEURANIX_LOCAL_API_URL;
|
|
18
|
+
}
|
|
19
|
+
return NEURANIX_PRODUCTION_API_URL;
|
|
20
|
+
}
|
|
21
|
+
export function validateApiBaseUrl(url) {
|
|
22
|
+
let parsed;
|
|
23
|
+
try {
|
|
24
|
+
parsed = new URL(url);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
throw new Error(`NEURANIX_API_URL inválida: ${url}`);
|
|
28
|
+
}
|
|
29
|
+
if (!["http:", "https:"].includes(parsed.protocol)) {
|
|
30
|
+
throw new Error("NEURANIX_API_URL deve usar http ou https");
|
|
31
|
+
}
|
|
32
|
+
const host = parsed.hostname.toLowerCase();
|
|
33
|
+
const allowCustom = process.env.NEURANIX_ALLOW_CUSTOM_HOST === "true";
|
|
34
|
+
if (!NEURANIX_ALLOWED_HOSTS.has(host) && !allowCustom) {
|
|
35
|
+
throw new Error(`Host não autorizado: ${host}. Use ${NEURANIX_DOMAIN} em produção ou defina NEURANIX_ALLOW_CUSTOM_HOST=true para desenvolvimento.`);
|
|
36
|
+
}
|
|
37
|
+
if (host.endsWith("neuranix.com.br") && parsed.protocol !== "https:") {
|
|
38
|
+
throw new Error("Produção neuranix.com.br exige HTTPS");
|
|
39
|
+
}
|
|
40
|
+
const normalized = url.replace(/\/$/, "");
|
|
41
|
+
if (!normalized.endsWith("/api/neuranix")) {
|
|
42
|
+
throw new Error("NEURANIX_API_URL deve terminar com /api/neuranix");
|
|
43
|
+
}
|
|
44
|
+
return normalized;
|
|
45
|
+
}
|
|
46
|
+
export function validateApiKey(apiKey) {
|
|
47
|
+
if (!apiKey) {
|
|
48
|
+
throw new Error("NEURANIX_API_KEY é obrigatória. Obtenha em https://neuranix.com.br/neuranix");
|
|
49
|
+
}
|
|
50
|
+
if (!apiKey.startsWith("ak_")) {
|
|
51
|
+
throw new Error("NEURANIX_API_KEY inválida (deve começar com ak_)");
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAEjD,MAAM,CAAC,MAAM,2BAA2B,GAAG,WAAW,eAAe,eAAe,CAAC;AAErF,MAAM,CAAC,MAAM,sBAAsB,GAAG,oCAAoC,CAAC;AAE3E,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC;IAC5C,iBAAiB;IACjB,qBAAqB;IACrB,WAAW;IACX,WAAW;CACZ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAEjD,MAAM,UAAU,iBAAiB;IAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC;IACtD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QACnF,OAAO,sBAAsB,CAAC;IAChC,CAAC;IAED,OAAO,2BAA2B,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,IAAI,MAAW,CAAC;IAEhB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,KAAK,MAAM,CAAC;IAEtE,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CACb,wBAAwB,IAAI,SAAS,eAAe,8EAA8E,CACnI,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;IACjG,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
3
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
|
+
import { CallToolRequestSchema, GetPromptRequestSchema, ListPromptsRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
5
|
+
import { MCP_USER_AGENT, resolveApiBaseUrl, validateApiKey, } from "./config.js";
|
|
6
|
+
import { NEURANIX_PROMPTS, SERVER_INSTRUCTIONS } from "./prompts.js";
|
|
7
|
+
import { USAGE_GUIDE_MARKDOWN, USAGE_GUIDE_URI } from "./resources.js";
|
|
8
|
+
import { NEURANIX_TOOLS, resolveToolCall } from "./tools.js";
|
|
9
|
+
const API_BASE = resolveApiBaseUrl();
|
|
10
|
+
const API_KEY = process.env.NEURANIX_API_KEY || "";
|
|
11
|
+
try {
|
|
12
|
+
validateApiKey(API_KEY);
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
16
|
+
console.error(`[neuranix-mcp] ${message}`);
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
async function apiCall(endpoint, method = "GET", body) {
|
|
20
|
+
const url = `${API_BASE}${endpoint}`;
|
|
21
|
+
const headers = {
|
|
22
|
+
"Content-Type": "application/json",
|
|
23
|
+
"User-Agent": MCP_USER_AGENT,
|
|
24
|
+
Authorization: `Bearer ${API_KEY}`,
|
|
25
|
+
};
|
|
26
|
+
const response = await fetch(url, {
|
|
27
|
+
method,
|
|
28
|
+
headers,
|
|
29
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
30
|
+
});
|
|
31
|
+
if (!response.ok) {
|
|
32
|
+
const error = await response.text();
|
|
33
|
+
throw new Error(`API error ${response.status}: ${error}`);
|
|
34
|
+
}
|
|
35
|
+
return response.json();
|
|
36
|
+
}
|
|
37
|
+
function formatContext(data) {
|
|
38
|
+
return [
|
|
39
|
+
`## Neuranix Context (${data.memory_count ?? 0} memories)`,
|
|
40
|
+
`Project: ${data.project?.name ?? "default"}`,
|
|
41
|
+
"",
|
|
42
|
+
String(data.context ?? "No relevant memories found."),
|
|
43
|
+
].join("\n");
|
|
44
|
+
}
|
|
45
|
+
function promptArg(args, key) {
|
|
46
|
+
const value = args?.[key];
|
|
47
|
+
return typeof value === "string" && value.trim() !== "" ? value : undefined;
|
|
48
|
+
}
|
|
49
|
+
const server = new Server({ name: "@neuranix/mcp-server", version: "1.2.0" }, {
|
|
50
|
+
capabilities: { tools: {}, prompts: {}, resources: {} },
|
|
51
|
+
instructions: SERVER_INSTRUCTIONS,
|
|
52
|
+
});
|
|
53
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
54
|
+
tools: NEURANIX_TOOLS,
|
|
55
|
+
}));
|
|
56
|
+
server.setRequestHandler(ListResourcesRequestSchema, async () => ({
|
|
57
|
+
resources: [
|
|
58
|
+
{
|
|
59
|
+
uri: USAGE_GUIDE_URI,
|
|
60
|
+
name: "Neuranix Agent Guide",
|
|
61
|
+
description: "When and how agents MUST use Neuranix memory tools",
|
|
62
|
+
mimeType: "text/markdown",
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
}));
|
|
66
|
+
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
67
|
+
if (request.params.uri !== USAGE_GUIDE_URI) {
|
|
68
|
+
throw new Error(`Unknown resource: ${request.params.uri}`);
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
contents: [
|
|
72
|
+
{
|
|
73
|
+
uri: USAGE_GUIDE_URI,
|
|
74
|
+
mimeType: "text/markdown",
|
|
75
|
+
text: USAGE_GUIDE_MARKDOWN,
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
};
|
|
79
|
+
});
|
|
80
|
+
server.setRequestHandler(ListPromptsRequestSchema, async () => ({
|
|
81
|
+
prompts: NEURANIX_PROMPTS,
|
|
82
|
+
}));
|
|
83
|
+
server.setRequestHandler(GetPromptRequestSchema, async (request) => {
|
|
84
|
+
const { name, arguments: args } = request.params;
|
|
85
|
+
try {
|
|
86
|
+
if (name === "session_start") {
|
|
87
|
+
const result = await apiCall("/memory", "POST", {
|
|
88
|
+
query: promptArg(args, "task") ?? "project context, recent decisions, and important patterns",
|
|
89
|
+
workspace_path: promptArg(args, "workspace_path"),
|
|
90
|
+
action: "context",
|
|
91
|
+
mode: "conversation",
|
|
92
|
+
});
|
|
93
|
+
return {
|
|
94
|
+
description: "Neuranix session context loaded",
|
|
95
|
+
messages: [
|
|
96
|
+
{
|
|
97
|
+
role: "user",
|
|
98
|
+
content: { type: "text", text: formatContext(result.data ?? {}) },
|
|
99
|
+
},
|
|
100
|
+
],
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
if (name === "before_task") {
|
|
104
|
+
const query = promptArg(args, "query");
|
|
105
|
+
if (!query) {
|
|
106
|
+
throw new Error("Argument 'query' is required for before_task");
|
|
107
|
+
}
|
|
108
|
+
const result = await apiCall("/memory", "POST", {
|
|
109
|
+
query,
|
|
110
|
+
workspace_path: promptArg(args, "workspace_path"),
|
|
111
|
+
action: "context",
|
|
112
|
+
mode: promptArg(args, "mode") ?? undefined,
|
|
113
|
+
});
|
|
114
|
+
return {
|
|
115
|
+
description: "Neuranix context for task",
|
|
116
|
+
messages: [
|
|
117
|
+
{
|
|
118
|
+
role: "user",
|
|
119
|
+
content: { type: "text", text: formatContext(result.data ?? {}) },
|
|
120
|
+
},
|
|
121
|
+
],
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
if (name === "save_decision") {
|
|
125
|
+
const content = promptArg(args, "content");
|
|
126
|
+
if (!content) {
|
|
127
|
+
throw new Error("Argument 'content' is required for save_decision");
|
|
128
|
+
}
|
|
129
|
+
const result = await apiCall("/memory", "POST", {
|
|
130
|
+
content,
|
|
131
|
+
workspace_path: promptArg(args, "workspace_path"),
|
|
132
|
+
action: "store",
|
|
133
|
+
});
|
|
134
|
+
const memory = (result.data?.memory ?? {});
|
|
135
|
+
return {
|
|
136
|
+
description: "Decision saved to Neuranix",
|
|
137
|
+
messages: [
|
|
138
|
+
{
|
|
139
|
+
role: "user",
|
|
140
|
+
content: {
|
|
141
|
+
type: "text",
|
|
142
|
+
text: `Memory saved to Neuranix: ${memory.summary ?? memory.id ?? "ok"}`,
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
],
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
throw new Error(`Unknown prompt: ${name}`);
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
152
|
+
return {
|
|
153
|
+
description: "Neuranix prompt error",
|
|
154
|
+
messages: [
|
|
155
|
+
{
|
|
156
|
+
role: "user",
|
|
157
|
+
content: { type: "text", text: `Neuranix error: ${message}` },
|
|
158
|
+
},
|
|
159
|
+
],
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
164
|
+
const toolName = request.params.name;
|
|
165
|
+
const args = request.params.arguments;
|
|
166
|
+
try {
|
|
167
|
+
const { body } = resolveToolCall(toolName, args);
|
|
168
|
+
const result = await apiCall("/memory", "POST", body);
|
|
169
|
+
const data = result.data ?? {};
|
|
170
|
+
if (data.action === "context") {
|
|
171
|
+
return { content: [{ type: "text", text: formatContext(data) }] };
|
|
172
|
+
}
|
|
173
|
+
if (data.action === "store") {
|
|
174
|
+
return {
|
|
175
|
+
content: [
|
|
176
|
+
{
|
|
177
|
+
type: "text",
|
|
178
|
+
text: `Memory saved: ${data.memory?.summary ?? data.memory?.id}`,
|
|
179
|
+
},
|
|
180
|
+
],
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
if (data.action === "recall") {
|
|
184
|
+
const memories = (data.memories ?? data.results ?? []);
|
|
185
|
+
const lines = [
|
|
186
|
+
`## Neuranix Recall (${data.total ?? memories.length} matches)`,
|
|
187
|
+
`Query: ${data.query ?? "—"}`,
|
|
188
|
+
"",
|
|
189
|
+
];
|
|
190
|
+
for (const m of memories.slice(0, 15)) {
|
|
191
|
+
lines.push(`- [${m.type ?? "memory"}] ${m.summary ?? m.content ?? ""}`);
|
|
192
|
+
}
|
|
193
|
+
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
194
|
+
}
|
|
195
|
+
return {
|
|
196
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
201
|
+
return {
|
|
202
|
+
content: [{ type: "text", text: `Neuranix error: ${message}` }],
|
|
203
|
+
isError: true,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
async function main() {
|
|
208
|
+
const transport = new StdioServerTransport();
|
|
209
|
+
await server.connect(transport);
|
|
210
|
+
console.error(`Neuranix MCP v1.2 — ${API_BASE}`);
|
|
211
|
+
}
|
|
212
|
+
main().catch((error) => {
|
|
213
|
+
console.error("Server error:", error);
|
|
214
|
+
process.exit(1);
|
|
215
|
+
});
|
|
216
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAEjE,eAAO,MAAM,gBAAgB,EAAE,MAAM,EAwDpC,CAAC;AAEF,eAAO,MAAM,mBAAmB,QAQrB,CAAC"}
|
package/dist/prompts.js
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export const NEURANIX_PROMPTS = [
|
|
2
|
+
{
|
|
3
|
+
name: "session_start",
|
|
4
|
+
description: "Load Neuranix project context at session start. Run at the beginning of each coding session or after context compaction.",
|
|
5
|
+
arguments: [
|
|
6
|
+
{
|
|
7
|
+
name: "task",
|
|
8
|
+
description: "Optional focus for this session (e.g. 'auth refactor')",
|
|
9
|
+
required: false,
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
name: "workspace_path",
|
|
13
|
+
description: "Absolute path to the project workspace",
|
|
14
|
+
required: false,
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: "before_task",
|
|
20
|
+
description: "Recall relevant memories before a complex task (refactor, debug, architecture, code review).",
|
|
21
|
+
arguments: [
|
|
22
|
+
{
|
|
23
|
+
name: "query",
|
|
24
|
+
description: "Task description or question",
|
|
25
|
+
required: true,
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: "mode",
|
|
29
|
+
description: "Profile: debug, code_review, architecture, code_generation, conversation",
|
|
30
|
+
required: false,
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: "workspace_path",
|
|
34
|
+
description: "Absolute path to the project workspace",
|
|
35
|
+
required: false,
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: "save_decision",
|
|
41
|
+
description: "Persist an important technical decision, fix, or pattern to Neuranix memory.",
|
|
42
|
+
arguments: [
|
|
43
|
+
{
|
|
44
|
+
name: "content",
|
|
45
|
+
description: "Decision or learning to remember",
|
|
46
|
+
required: true,
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: "workspace_path",
|
|
50
|
+
description: "Absolute path to the project workspace",
|
|
51
|
+
required: false,
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
export const SERVER_INSTRUCTIONS = [
|
|
57
|
+
"Neuranix persistent memory for all IDE agents (Cursor, VS Code, Claude Code, Windsurf).",
|
|
58
|
+
"SESSION START: call neuranix_context with workspace_path.",
|
|
59
|
+
"BEFORE complex tasks: call neuranix_recall with query + workspace_path.",
|
|
60
|
+
"AFTER decisions/fixes: call neuranix_store with content + workspace_path.",
|
|
61
|
+
"Resource neuranix://agent-guide has full usage rules — read when unsure.",
|
|
62
|
+
"Never skip memory on multi-file changes. Use mode=debug|code_review|architecture as needed.",
|
|
63
|
+
"Claude Code: /mcp__neuranix__session_start, /mcp__neuranix__before_task, /mcp__neuranix__save_decision.",
|
|
64
|
+
].join(" ");
|
|
65
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAa;IACxC;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,0HAA0H;QAC5H,SAAS,EAAE;YACT;gBACE,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,wDAAwD;gBACrE,QAAQ,EAAE,KAAK;aAChB;YACD;gBACE,IAAI,EAAE,gBAAgB;gBACtB,WAAW,EAAE,wCAAwC;gBACrD,QAAQ,EAAE,KAAK;aAChB;SACF;KACF;IACD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EACT,8FAA8F;QAChG,SAAS,EAAE;YACT;gBACE,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,8BAA8B;gBAC3C,QAAQ,EAAE,IAAI;aACf;YACD;gBACE,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,0EAA0E;gBACvF,QAAQ,EAAE,KAAK;aAChB;YACD;gBACE,IAAI,EAAE,gBAAgB;gBACtB,WAAW,EAAE,wCAAwC;gBACrD,QAAQ,EAAE,KAAK;aAChB;SACF;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,8EAA8E;QAC3F,SAAS,EAAE;YACT;gBACE,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,kCAAkC;gBAC/C,QAAQ,EAAE,IAAI;aACf;YACD;gBACE,IAAI,EAAE,gBAAgB;gBACtB,WAAW,EAAE,wCAAwC;gBACrD,QAAQ,EAAE,KAAK;aAChB;SACF;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,yFAAyF;IACzF,2DAA2D;IAC3D,yEAAyE;IACzE,2EAA2E;IAC3E,0EAA0E;IAC1E,6FAA6F;IAC7F,yGAAyG;CAC1G,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const USAGE_GUIDE_URI = "neuranix://agent-guide";
|
|
2
|
+
export declare const USAGE_GUIDE_MARKDOWN = "# Neuranix \u2014 Guia do agente\n\n## Quando chamar (obrigat\u00F3rio)\n\n| Momento | Tool MCP |\n|---------|----------|\n| In\u00EDcio da sess\u00E3o / ap\u00F3s compacta\u00E7\u00E3o | `neuranix_context` |\n| Antes de refactor, debug, review, arquitetura | `neuranix_recall` |\n| Ap\u00F3s decis\u00E3o t\u00E9cnica, fix ou padr\u00E3o descoberto | `neuranix_store` |\n\nSempre passe `workspace_path` com o caminho absoluto do reposit\u00F3rio.\n\n## Perfis (mode)\n- `debug` \u2014 erros e troubleshooting\n- `code_review` \u2014 revis\u00E3o de c\u00F3digo\n- `architecture` \u2014 decis\u00F5es de design\n- `code_generation` \u2014 implementa\u00E7\u00E3o\n- `conversation` \u2014 contexto geral\n\n## Prompts (Claude Code)\n- `/mcp__neuranix__session_start`\n- `/mcp__neuranix__before_task`\n- `/mcp__neuranix__save_decision`\n\n## Regra de ouro\nN\u00E3o espere o usu\u00E1rio pedir mem\u00F3ria. Use proativamente em toda tarefa n\u00E3o trivial.\n";
|
|
3
|
+
//# sourceMappingURL=resources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,2BAA2B,CAAC;AAExD,eAAO,MAAM,oBAAoB,m8BA0BhC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export const USAGE_GUIDE_URI = "neuranix://agent-guide";
|
|
2
|
+
export const USAGE_GUIDE_MARKDOWN = `# Neuranix — Guia do agente
|
|
3
|
+
|
|
4
|
+
## Quando chamar (obrigatório)
|
|
5
|
+
|
|
6
|
+
| Momento | Tool MCP |
|
|
7
|
+
|---------|----------|
|
|
8
|
+
| Início da sessão / após compactação | \`neuranix_context\` |
|
|
9
|
+
| Antes de refactor, debug, review, arquitetura | \`neuranix_recall\` |
|
|
10
|
+
| Após decisão técnica, fix ou padrão descoberto | \`neuranix_store\` |
|
|
11
|
+
|
|
12
|
+
Sempre passe \`workspace_path\` com o caminho absoluto do repositório.
|
|
13
|
+
|
|
14
|
+
## Perfis (mode)
|
|
15
|
+
- \`debug\` — erros e troubleshooting
|
|
16
|
+
- \`code_review\` — revisão de código
|
|
17
|
+
- \`architecture\` — decisões de design
|
|
18
|
+
- \`code_generation\` — implementação
|
|
19
|
+
- \`conversation\` — contexto geral
|
|
20
|
+
|
|
21
|
+
## Prompts (Claude Code)
|
|
22
|
+
- \`/mcp__neuranix__session_start\`
|
|
23
|
+
- \`/mcp__neuranix__before_task\`
|
|
24
|
+
- \`/mcp__neuranix__save_decision\`
|
|
25
|
+
|
|
26
|
+
## Regra de ouro
|
|
27
|
+
Não espere o usuário pedir memória. Use proativamente em toda tarefa não trivial.
|
|
28
|
+
`;
|
|
29
|
+
//# sourceMappingURL=resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,wBAAwB,CAAC;AAExD,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BnC,CAAC"}
|
package/dist/tools.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
export declare const NEURANIX_TOOLS: Tool[];
|
|
3
|
+
export type MemoryAction = "context" | "store" | "recall";
|
|
4
|
+
export declare function resolveToolCall(toolName: string, args: Record<string, unknown> | undefined): {
|
|
5
|
+
action: MemoryAction;
|
|
6
|
+
body: Record<string, unknown>;
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAe/D,eAAO,MAAM,cAAc,EAAE,IAAI,EA6EhC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE1D,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACxC;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAoDzD"}
|
package/dist/tools.js
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
const ALWAYS_LOAD = { "anthropic/alwaysLoad": true };
|
|
2
|
+
const workspacePath = {
|
|
3
|
+
type: "string",
|
|
4
|
+
description: "Absolute path to the project workspace (required)",
|
|
5
|
+
};
|
|
6
|
+
const modeEnum = {
|
|
7
|
+
type: "string",
|
|
8
|
+
enum: ["conversation", "code_generation", "code_review", "debug", "architecture"],
|
|
9
|
+
description: "Context profile — auto-detected if omitted",
|
|
10
|
+
};
|
|
11
|
+
export const NEURANIX_TOOLS = [
|
|
12
|
+
{
|
|
13
|
+
name: "neuranix_recall",
|
|
14
|
+
description: "REQUIRED before refactor, debug, code review, architecture work, or multi-file changes. " +
|
|
15
|
+
"Recalls relevant memories from past sessions for the current project.",
|
|
16
|
+
inputSchema: {
|
|
17
|
+
type: "object",
|
|
18
|
+
properties: {
|
|
19
|
+
query: {
|
|
20
|
+
type: "string",
|
|
21
|
+
description: "Current task or question",
|
|
22
|
+
},
|
|
23
|
+
workspace_path: workspacePath,
|
|
24
|
+
mode: modeEnum,
|
|
25
|
+
},
|
|
26
|
+
required: ["query", "workspace_path"],
|
|
27
|
+
},
|
|
28
|
+
_meta: ALWAYS_LOAD,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: "neuranix_store",
|
|
32
|
+
description: "REQUIRED after technical decisions, non-trivial bug fixes, architecture choices, or reusable patterns. " +
|
|
33
|
+
"Persists learning to Neuranix cloud memory.",
|
|
34
|
+
inputSchema: {
|
|
35
|
+
type: "object",
|
|
36
|
+
properties: {
|
|
37
|
+
content: {
|
|
38
|
+
type: "string",
|
|
39
|
+
description: "Decision, fix, pattern, or preference to remember",
|
|
40
|
+
},
|
|
41
|
+
workspace_path: workspacePath,
|
|
42
|
+
project_name: {
|
|
43
|
+
type: "string",
|
|
44
|
+
description: "Optional project name override",
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
required: ["content", "workspace_path"],
|
|
48
|
+
},
|
|
49
|
+
_meta: ALWAYS_LOAD,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: "neuranix_context",
|
|
53
|
+
description: "REQUIRED at session start and after context compaction. Builds enriched project context from memories.",
|
|
54
|
+
inputSchema: {
|
|
55
|
+
type: "object",
|
|
56
|
+
properties: {
|
|
57
|
+
query: {
|
|
58
|
+
type: "string",
|
|
59
|
+
description: "Optional session focus (defaults to project overview)",
|
|
60
|
+
},
|
|
61
|
+
workspace_path: workspacePath,
|
|
62
|
+
mode: modeEnum,
|
|
63
|
+
},
|
|
64
|
+
required: ["workspace_path"],
|
|
65
|
+
},
|
|
66
|
+
_meta: ALWAYS_LOAD,
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: "neuranix_memory",
|
|
70
|
+
description: "Unified Neuranix memory (legacy). Prefer neuranix_recall, neuranix_store, neuranix_context when possible.",
|
|
71
|
+
inputSchema: {
|
|
72
|
+
type: "object",
|
|
73
|
+
properties: {
|
|
74
|
+
query: { type: "string", description: "Task — returns context (before working)" },
|
|
75
|
+
content: { type: "string", description: "Learning to save (after significant work)" },
|
|
76
|
+
workspace_path: workspacePath,
|
|
77
|
+
project_name: { type: "string", description: "Optional project name override" },
|
|
78
|
+
action: { type: "string", enum: ["context", "store", "recall"] },
|
|
79
|
+
mode: modeEnum,
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
_meta: ALWAYS_LOAD,
|
|
83
|
+
},
|
|
84
|
+
];
|
|
85
|
+
export function resolveToolCall(toolName, args) {
|
|
86
|
+
const workspace_path = args?.workspace_path;
|
|
87
|
+
const project_name = args?.project_name;
|
|
88
|
+
switch (toolName) {
|
|
89
|
+
case "neuranix_recall":
|
|
90
|
+
return {
|
|
91
|
+
action: "recall",
|
|
92
|
+
body: {
|
|
93
|
+
query: args?.query,
|
|
94
|
+
workspace_path,
|
|
95
|
+
project_name,
|
|
96
|
+
action: "recall",
|
|
97
|
+
mode: args?.mode,
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
case "neuranix_store":
|
|
101
|
+
return {
|
|
102
|
+
action: "store",
|
|
103
|
+
body: {
|
|
104
|
+
content: args?.content,
|
|
105
|
+
workspace_path,
|
|
106
|
+
project_name,
|
|
107
|
+
action: "store",
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
case "neuranix_context":
|
|
111
|
+
return {
|
|
112
|
+
action: "context",
|
|
113
|
+
body: {
|
|
114
|
+
query: args?.query ??
|
|
115
|
+
"project context, recent decisions, and important patterns",
|
|
116
|
+
workspace_path,
|
|
117
|
+
project_name,
|
|
118
|
+
action: "context",
|
|
119
|
+
mode: args?.mode ?? "conversation",
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
default:
|
|
123
|
+
return {
|
|
124
|
+
action: args?.action ?? "context",
|
|
125
|
+
body: {
|
|
126
|
+
query: args?.query,
|
|
127
|
+
content: args?.content,
|
|
128
|
+
workspace_path,
|
|
129
|
+
project_name,
|
|
130
|
+
action: args?.action,
|
|
131
|
+
mode: args?.mode,
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@neuranix/mcp-server",
|
|
3
|
+
"version": "1.2.0",
|
|
4
|
+
"description": "Neuranix MCP Server — persistent cognitive memory for IDE AI agents (Cursor, VS Code, Claude Code, Windsurf)",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"neuranix-mcp": "./dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"README.md"
|
|
13
|
+
],
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "tsc && node -e \"const fs=require('fs');const p='dist/index.js';let c=fs.readFileSync(p,'utf8');if(!c.startsWith('#!'))fs.writeFileSync(p,'#!/usr/bin/env node\\n'+c)\"",
|
|
16
|
+
"prepublishOnly": "npm run build",
|
|
17
|
+
"start": "node dist/index.js",
|
|
18
|
+
"dev": "tsx watch src/index.ts"
|
|
19
|
+
},
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"@modelcontextprotocol/sdk": "^1.0.0"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"@types/node": "^20.0.0",
|
|
25
|
+
"typescript": "^5.4.0",
|
|
26
|
+
"tsx": "^4.7.0"
|
|
27
|
+
},
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=18"
|
|
30
|
+
},
|
|
31
|
+
"keywords": [
|
|
32
|
+
"mcp",
|
|
33
|
+
"neuranix",
|
|
34
|
+
"memory",
|
|
35
|
+
"llm",
|
|
36
|
+
"agent",
|
|
37
|
+
"ide",
|
|
38
|
+
"cursor",
|
|
39
|
+
"vscode",
|
|
40
|
+
"claude-code",
|
|
41
|
+
"claude"
|
|
42
|
+
],
|
|
43
|
+
"license": "MIT",
|
|
44
|
+
"homepage": "https://neuranix.com.br",
|
|
45
|
+
"repository": {
|
|
46
|
+
"type": "git",
|
|
47
|
+
"url": "https://github.com/neuranix/neuranix"
|
|
48
|
+
},
|
|
49
|
+
"publishConfig": {
|
|
50
|
+
"access": "public"
|
|
51
|
+
}
|
|
52
|
+
}
|