@everstateai/mcp 1.0.0 → 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/dist/index.js CHANGED
@@ -15,11 +15,38 @@ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
15
15
  const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
16
16
  const API_BASE = process.env.EVERSTATE_API_URL || "https://www.everstate.ai";
17
17
  const API_KEY = process.env.EVERSTATE_API_KEY;
18
- const PROJECT_ID = process.env.EVERSTATE_PROJECT_ID;
18
+ const INITIAL_PROJECT_ID = process.env.EVERSTATE_PROJECT_ID;
19
+ // Session state - persists projectId across tool calls within this proxy instance
20
+ let sessionProjectId = INITIAL_PROJECT_ID;
19
21
  if (!API_KEY) {
20
22
  console.error("EVERSTATE_API_KEY environment variable is required");
21
23
  process.exit(1);
22
24
  }
25
+ // Auto-detect default project from API key if not explicitly set
26
+ async function detectDefaultProject() {
27
+ if (sessionProjectId) {
28
+ console.error(`[Everstate] Using configured project: ${sessionProjectId}`);
29
+ return;
30
+ }
31
+ try {
32
+ const res = await fetch(`${API_BASE}/api/projects`, {
33
+ headers: { Authorization: `Bearer ${API_KEY}` },
34
+ });
35
+ if (res.ok) {
36
+ const projects = await res.json();
37
+ if (projects.length > 0) {
38
+ sessionProjectId = projects[0].id;
39
+ console.error(`[Everstate] Auto-detected default project: ${projects[0].name} (${sessionProjectId})`);
40
+ }
41
+ else {
42
+ console.error("[Everstate] Warning: No projects found. Use switch_project or sync to set one.");
43
+ }
44
+ }
45
+ }
46
+ catch (error) {
47
+ console.error("[Everstate] Could not auto-detect project:", error);
48
+ }
49
+ }
23
50
  // Create MCP server
24
51
  const server = new index_js_1.Server({ name: "everstate", version: "1.0.0" }, { capabilities: { tools: {} } });
25
52
  // Fetch tool definitions from cloud
@@ -46,8 +73,9 @@ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
46
73
  const enrichedArgs = { ...args };
47
74
  const params = enrichedArgs.params;
48
75
  const hasProjectIdInParams = params && typeof params === 'object' && 'projectId' in params && params.projectId;
49
- if (PROJECT_ID && !enrichedArgs.projectId && !hasProjectIdInParams) {
50
- enrichedArgs.projectId = PROJECT_ID;
76
+ // Use session projectId (may have been set by switch_project or sync)
77
+ if (sessionProjectId && !enrichedArgs.projectId && !hasProjectIdInParams) {
78
+ enrichedArgs.projectId = sessionProjectId;
51
79
  }
52
80
  const res = await fetch(`${API_BASE}/mcp/execute`, {
53
81
  method: "POST",
@@ -63,10 +91,28 @@ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
63
91
  isError: true,
64
92
  };
65
93
  }
66
- return (await res.json());
94
+ const result = (await res.json());
95
+ // Update session state based on tool results
96
+ // switch_project and sync can set the active project
97
+ if (name === 'switch_project' || name === 'everstate_switch_project') {
98
+ // Extract projectId from result
99
+ const data = result.data || result.project;
100
+ if (data?.id) {
101
+ sessionProjectId = data.id;
102
+ console.error(`[Everstate] Session project set to: ${sessionProjectId}`);
103
+ }
104
+ }
105
+ else if (name === 'sync' && enrichedArgs.projectId) {
106
+ // sync with explicit projectId sets the session project
107
+ sessionProjectId = enrichedArgs.projectId;
108
+ console.error(`[Everstate] Session project set to: ${sessionProjectId}`);
109
+ }
110
+ return result;
67
111
  });
68
112
  // Start server
69
113
  async function main() {
114
+ // Auto-detect default project before starting
115
+ await detectDefaultProject();
70
116
  const transport = new stdio_js_1.StdioServerTransport();
71
117
  await server.connect(transport);
72
118
  console.error("Everstate MCP Proxy connected to", API_BASE);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AACA;;;;;;;;GAQG;;AAEH,wEAAmE;AACnE,wEAAiF;AACjF,iEAM4C;AAE5C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,0BAA0B,CAAC;AAC7E,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;AAC9C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;AAEpD,IAAI,CAAC,OAAO,EAAE,CAAC;IACb,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAQD,oBAAoB;AACpB,MAAM,MAAM,GAAG,IAAI,iBAAM,CACvB,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,EACvC,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChC,CAAC;AAEF,oCAAoC;AACpC,MAAM,CAAC,iBAAiB,CAAC,iCAAsB,EAAE,KAAK,IAA8B,EAAE;IACpF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,YAAY,EAAE;QAC/C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,OAAO,EAAE;YAClC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;KAC3D,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAkB,CAAC;IACjD,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEH,8BAA8B;AAC9B,MAAM,CAAC,iBAAiB,CAAC,gCAAqB,EAAE,KAAK,EAAE,OAAO,EAA2B,EAAE;IACzF,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAEjD,sEAAsE;IACtE,kEAAkE;IAClE,MAAM,YAAY,GAAG,EAAE,GAAG,IAAI,EAA6B,CAAC;IAC5D,MAAM,MAAM,GAAG,YAAY,CAAC,MAA6C,CAAC;IAC1E,MAAM,oBAAoB,GAAG,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,WAAW,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC;IAC/G,IAAI,UAAU,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACnE,YAAY,CAAC,SAAS,GAAG,UAAU,CAAC;IACtC,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,cAAc,EAAE;QACjD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,OAAO,EAAE;YAClC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;KACxD,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;YAC/E,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAmB,CAAC;AAC9C,CAAC,CAAC,CAAC;AAEH,eAAe;AACf,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,QAAQ,CAAC,CAAC;AAC9D,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@everstateai/mcp",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "description": "Everstate MCP server - persistent AI coding memory",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/src/index.ts CHANGED
@@ -21,13 +21,42 @@ import {
21
21
 
22
22
  const API_BASE = process.env.EVERSTATE_API_URL || "https://www.everstate.ai";
23
23
  const API_KEY = process.env.EVERSTATE_API_KEY;
24
- const PROJECT_ID = process.env.EVERSTATE_PROJECT_ID;
24
+ const INITIAL_PROJECT_ID = process.env.EVERSTATE_PROJECT_ID;
25
+
26
+ // Session state - persists projectId across tool calls within this proxy instance
27
+ let sessionProjectId = INITIAL_PROJECT_ID;
25
28
 
26
29
  if (!API_KEY) {
27
30
  console.error("EVERSTATE_API_KEY environment variable is required");
28
31
  process.exit(1);
29
32
  }
30
33
 
34
+ // Auto-detect default project from API key if not explicitly set
35
+ async function detectDefaultProject(): Promise<void> {
36
+ if (sessionProjectId) {
37
+ console.error(`[Everstate] Using configured project: ${sessionProjectId}`);
38
+ return;
39
+ }
40
+
41
+ try {
42
+ const res = await fetch(`${API_BASE}/api/projects`, {
43
+ headers: { Authorization: `Bearer ${API_KEY}` },
44
+ });
45
+
46
+ if (res.ok) {
47
+ const projects = await res.json() as Array<{ id: string; name: string }>;
48
+ if (projects.length > 0) {
49
+ sessionProjectId = projects[0].id;
50
+ console.error(`[Everstate] Auto-detected default project: ${projects[0].name} (${sessionProjectId})`);
51
+ } else {
52
+ console.error("[Everstate] Warning: No projects found. Use switch_project or sync to set one.");
53
+ }
54
+ }
55
+ } catch (error) {
56
+ console.error("[Everstate] Could not auto-detect project:", error);
57
+ }
58
+ }
59
+
31
60
  // Type for API responses
32
61
  interface ToolsResponse {
33
62
  tools: Tool[];
@@ -68,8 +97,10 @@ server.setRequestHandler(CallToolRequestSchema, async (request): Promise<CallToo
68
97
  const enrichedArgs = { ...args } as Record<string, unknown>;
69
98
  const params = enrichedArgs.params as Record<string, unknown> | undefined;
70
99
  const hasProjectIdInParams = params && typeof params === 'object' && 'projectId' in params && params.projectId;
71
- if (PROJECT_ID && !enrichedArgs.projectId && !hasProjectIdInParams) {
72
- enrichedArgs.projectId = PROJECT_ID;
100
+
101
+ // Use session projectId (may have been set by switch_project or sync)
102
+ if (sessionProjectId && !enrichedArgs.projectId && !hasProjectIdInParams) {
103
+ enrichedArgs.projectId = sessionProjectId;
73
104
  }
74
105
 
75
106
  const res = await fetch(`${API_BASE}/mcp/execute`, {
@@ -88,11 +119,31 @@ server.setRequestHandler(CallToolRequestSchema, async (request): Promise<CallToo
88
119
  };
89
120
  }
90
121
 
91
- return (await res.json()) as CallToolResult;
122
+ const result = (await res.json()) as CallToolResult & { data?: any };
123
+
124
+ // Update session state based on tool results
125
+ // switch_project and sync can set the active project
126
+ if (name === 'switch_project' || name === 'everstate_switch_project') {
127
+ // Extract projectId from result
128
+ const data = result.data || (result as any).project;
129
+ if (data?.id) {
130
+ sessionProjectId = data.id;
131
+ console.error(`[Everstate] Session project set to: ${sessionProjectId}`);
132
+ }
133
+ } else if (name === 'sync' && enrichedArgs.projectId) {
134
+ // sync with explicit projectId sets the session project
135
+ sessionProjectId = enrichedArgs.projectId as string;
136
+ console.error(`[Everstate] Session project set to: ${sessionProjectId}`);
137
+ }
138
+
139
+ return result;
92
140
  });
93
141
 
94
142
  // Start server
95
143
  async function main() {
144
+ // Auto-detect default project before starting
145
+ await detectDefaultProject();
146
+
96
147
  const transport = new StdioServerTransport();
97
148
  await server.connect(transport);
98
149
  console.error("Everstate MCP Proxy connected to", API_BASE);