@inferevents/mcp 0.2.1 → 0.3.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/config.d.ts CHANGED
@@ -3,7 +3,27 @@ export interface InferConfig {
3
3
  endpoint: string;
4
4
  projectId?: string;
5
5
  }
6
+ export interface InferConfigFile {
7
+ session?: string;
8
+ activeProject?: string;
9
+ endpoint?: string;
10
+ projects: Record<string, {
11
+ apiKey: string;
12
+ projectId: string;
13
+ writeKey?: string;
14
+ }>;
15
+ }
6
16
  export declare function loadConfig(): Promise<InferConfig>;
17
+ export declare function readConfigFile(): Promise<InferConfigFile>;
18
+ export declare function writeConfigFile(config: InferConfigFile): Promise<void>;
19
+ export declare function addProject(name: string, apiKey: string, projectId: string, writeKey?: string, setActive?: boolean, session?: string): Promise<void>;
20
+ export declare function switchProject(name: string): Promise<InferConfig>;
21
+ export declare function listProjects(): Promise<Array<{
22
+ name: string;
23
+ projectId: string;
24
+ active: boolean;
25
+ }>>;
26
+ export declare function getSession(): Promise<string | undefined>;
7
27
  export declare class ConfigError extends Error {
8
28
  constructor(message: string);
9
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkBD,wBAAsB,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC,CA+CvD;AAED,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QACvB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;CACJ;AAsBD,wBAAsB,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC,CAmFvD;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,eAAe,CAAC,CAyB/D;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5E;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,UAAO,EAChB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAWtE;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,CAOzG;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAG9D;AAED,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B"}
package/dist/config.js CHANGED
@@ -1,21 +1,35 @@
1
- import { readFile } from "node:fs/promises";
1
+ import { readFile, writeFile, mkdir } from "node:fs/promises";
2
2
  import { join } from "node:path";
3
3
  import { homedir } from "node:os";
4
- const CONFIG_PATH = join(homedir(), ".infer", "config.json");
4
+ const CONFIG_DIR = join(homedir(), ".infer");
5
+ const CONFIG_PATH = join(CONFIG_DIR, "config.json");
5
6
  const SETUP_INSTRUCTIONS = `
6
7
  Infer MCP server is not configured.
7
8
 
8
- To set up, create ~/.infer/config.json with:
9
+ Run /infer-setup in Claude Code, or create ~/.infer/config.json:
9
10
 
10
11
  {
11
- "apiKey": "pk_read_...",
12
12
  "endpoint": "https://api.infer.events",
13
- "projectId": "your-project-id"
13
+ "activeProject": "my-project",
14
+ "projects": {
15
+ "my-project": {
16
+ "apiKey": "pk_read_...",
17
+ "projectId": "proj_..."
18
+ }
19
+ }
14
20
  }
15
-
16
- Get your read API key from https://infer.events/settings/api-keys
17
21
  `.trim();
18
22
  export async function loadConfig() {
23
+ // Env overrides (highest priority)
24
+ const envKey = process.env.INFER_API_KEY;
25
+ const envProject = process.env.INFER_PROJECT_ID;
26
+ if (envKey) {
27
+ return {
28
+ apiKey: envKey,
29
+ endpoint: process.env.INFER_ENDPOINT ?? "https://api.infer.events",
30
+ projectId: envProject,
31
+ };
32
+ }
19
33
  let raw;
20
34
  try {
21
35
  raw = await readFile(CONFIG_PATH, "utf-8");
@@ -30,23 +44,108 @@ export async function loadConfig() {
30
44
  catch {
31
45
  throw new ConfigError(`Invalid JSON in ${CONFIG_PATH}. Please check the file syntax.`);
32
46
  }
33
- if (typeof parsed !== "object" ||
34
- parsed === null ||
35
- !("apiKey" in parsed) ||
36
- typeof parsed.apiKey !== "string") {
37
- throw new ConfigError(`Missing or invalid "apiKey" in ${CONFIG_PATH}.\n\n${SETUP_INSTRUCTIONS}`);
38
- }
39
47
  const config = parsed;
40
- const apiKey = config.apiKey;
41
- if (!apiKey.startsWith("pk_read_")) {
42
- throw new ConfigError(`The MCP server requires a read API key (starts with "pk_read_"). ` +
43
- `The key in ${CONFIG_PATH} appears to be a different key type.`);
44
- }
45
- const endpoint = typeof config.endpoint === "string"
46
- ? config.endpoint.replace(/\/+$/, "")
47
- : "https://api.infer.events";
48
- const projectId = typeof config.projectId === "string" ? config.projectId : undefined;
49
- return { apiKey, endpoint, projectId };
48
+ // Backwards compat: old flat format { apiKey, endpoint, projectId }
49
+ if ("apiKey" in config && typeof config.apiKey === "string") {
50
+ const apiKey = config.apiKey;
51
+ if (!apiKey.startsWith("pk_read_")) {
52
+ throw new ConfigError(`The MCP server requires a read API key (starts with "pk_read_").`);
53
+ }
54
+ return {
55
+ apiKey,
56
+ endpoint: typeof config.endpoint === "string"
57
+ ? config.endpoint.replace(/\/+$/, "")
58
+ : "https://api.infer.events",
59
+ projectId: typeof config.projectId === "string" ? config.projectId : undefined,
60
+ };
61
+ }
62
+ // New profiles format
63
+ if ("projects" in config && typeof config.projects === "object" && config.projects !== null) {
64
+ const projects = config.projects;
65
+ const names = Object.keys(projects);
66
+ if (names.length === 0) {
67
+ throw new ConfigError(`No projects in ${CONFIG_PATH}. Run /infer-setup to add one.`);
68
+ }
69
+ const activeName = typeof config.activeProject === "string"
70
+ ? config.activeProject
71
+ : names[0];
72
+ const project = projects[activeName];
73
+ if (!project) {
74
+ throw new ConfigError(`Active project "${activeName}" not found in config. Available: ${names.join(", ")}`);
75
+ }
76
+ const apiKey = project.apiKey;
77
+ if (!apiKey || !apiKey.startsWith("pk_read_")) {
78
+ throw new ConfigError(`Invalid read key for project "${activeName}" in ${CONFIG_PATH}.`);
79
+ }
80
+ return {
81
+ apiKey,
82
+ endpoint: typeof config.endpoint === "string"
83
+ ? config.endpoint.replace(/\/+$/, "")
84
+ : "https://api.infer.events",
85
+ projectId: typeof project.projectId === "string" ? project.projectId : undefined,
86
+ };
87
+ }
88
+ throw new ConfigError(SETUP_INSTRUCTIONS);
89
+ }
90
+ export async function readConfigFile() {
91
+ try {
92
+ const raw = await readFile(CONFIG_PATH, "utf-8");
93
+ const parsed = JSON.parse(raw);
94
+ // Migrate old flat format
95
+ if ("apiKey" in parsed && !("projects" in parsed)) {
96
+ return {
97
+ session: typeof parsed.session === "string" ? parsed.session : undefined,
98
+ endpoint: typeof parsed.endpoint === "string" ? parsed.endpoint : "https://api.infer.events",
99
+ activeProject: "default",
100
+ projects: {
101
+ default: {
102
+ apiKey: parsed.apiKey,
103
+ projectId: parsed.projectId ?? "",
104
+ writeKey: parsed.writeKey,
105
+ },
106
+ },
107
+ };
108
+ }
109
+ return parsed;
110
+ }
111
+ catch {
112
+ return { projects: {}, endpoint: "https://api.infer.events" };
113
+ }
114
+ }
115
+ export async function writeConfigFile(config) {
116
+ await mkdir(CONFIG_DIR, { recursive: true });
117
+ await writeFile(CONFIG_PATH, JSON.stringify(config, null, 2) + "\n", "utf-8");
118
+ }
119
+ export async function addProject(name, apiKey, projectId, writeKey, setActive = true, session) {
120
+ const config = await readConfigFile();
121
+ config.projects[name] = { apiKey, projectId, writeKey };
122
+ if (setActive)
123
+ config.activeProject = name;
124
+ if (session)
125
+ config.session = session;
126
+ await writeConfigFile(config);
127
+ }
128
+ export async function switchProject(name) {
129
+ const config = await readConfigFile();
130
+ if (!config.projects[name]) {
131
+ const available = Object.keys(config.projects);
132
+ throw new ConfigError(`Project "${name}" not found. Available: ${available.join(", ")}`);
133
+ }
134
+ config.activeProject = name;
135
+ await writeConfigFile(config);
136
+ return loadConfig();
137
+ }
138
+ export async function listProjects() {
139
+ const config = await readConfigFile();
140
+ return Object.entries(config.projects).map(([name, p]) => ({
141
+ name,
142
+ projectId: p.projectId,
143
+ active: name === config.activeProject,
144
+ }));
145
+ }
146
+ export async function getSession() {
147
+ const config = await readConfigFile();
148
+ return config.session;
50
149
  }
51
150
  export class ConfigError extends Error {
52
151
  constructor(message) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAQlC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AAE7D,MAAM,kBAAkB,GAAG;;;;;;;;;;;;CAY1B,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,WAAW,CACnB,mBAAmB,WAAW,iCAAiC,CAChE,CAAC;IACJ,CAAC;IAED,IACE,OAAO,MAAM,KAAK,QAAQ;QAC1B,MAAM,KAAK,IAAI;QACf,CAAC,CAAC,QAAQ,IAAI,MAAM,CAAC;QACrB,OAAQ,MAAkC,CAAC,MAAM,KAAK,QAAQ,EAC9D,CAAC;QACD,MAAM,IAAI,WAAW,CACnB,kCAAkC,WAAW,QAAQ,kBAAkB,EAAE,CAC1E,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAiC,CAAC;IACjD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAgB,CAAC;IAEvC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,WAAW,CACnB,mEAAmE;YACjE,cAAc,WAAW,sCAAsC,CAClE,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GACZ,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;QACjC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACrC,CAAC,CAAC,0BAA0B,CAAC;IAEjC,MAAM,SAAS,GACb,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAEtE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAsB/C,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAkH3D"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA8B/C,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAwJ3D"}
package/dist/server.js CHANGED
@@ -6,6 +6,8 @@ import { getRetentionSchema, handleGetRetention, } from "./tools/get-retention.j
6
6
  import { getUserJourneySchema, handleGetUserJourney, } from "./tools/get-user-journey.js";
7
7
  import { getTopEventsSchema, handleGetTopEvents, } from "./tools/get-top-events.js";
8
8
  import { getInsightsSchema, handleGetInsights, } from "./tools/get-insights.js";
9
+ import { switchProjectSchema, handleSwitchProject, } from "./tools/switch-project.js";
10
+ import { createProjectSchema, handleCreateProject, } from "./tools/create-project.js";
9
11
  export function createServer(config) {
10
12
  const client = new ApiClient(config);
11
13
  const server = new McpServer({
@@ -90,6 +92,34 @@ export function createServer(config) {
90
92
  };
91
93
  }
92
94
  });
95
+ server.tool("switch_project", "Switch between Infer projects or list all configured projects. " +
96
+ "Use when the user says 'switch to project X' or 'list my projects' or " +
97
+ "wants to query data from a different project.", switchProjectSchema, async (params) => {
98
+ try {
99
+ const text = await handleSwitchProject(params);
100
+ return { content: [{ type: "text", text }] };
101
+ }
102
+ catch (error) {
103
+ return {
104
+ content: [{ type: "text", text: formatError(error) }],
105
+ isError: true,
106
+ };
107
+ }
108
+ });
109
+ server.tool("create_project", "Create a new Infer project from the CLI. " +
110
+ "Use when the user wants to add analytics to a new codebase. " +
111
+ "Requires an active session from prior signup.", createProjectSchema, async (params) => {
112
+ try {
113
+ const text = await handleCreateProject(params, config.endpoint);
114
+ return { content: [{ type: "text", text }] };
115
+ }
116
+ catch (error) {
117
+ return {
118
+ content: [{ type: "text", text: formatError(error) }],
119
+ isError: true,
120
+ };
121
+ }
122
+ });
93
123
  return server;
94
124
  }
95
125
  function formatError(error) {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { z } from "zod";
2
+ export declare const createProjectSchema: {
3
+ project_name: z.ZodString;
4
+ session: z.ZodOptional<z.ZodString>;
5
+ };
6
+ export declare function handleCreateProject(params: {
7
+ project_name: string;
8
+ session?: string;
9
+ }, endpoint: string): Promise<string>;
10
+ //# sourceMappingURL=create-project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-project.d.ts","sourceRoot":"","sources":["../../src/tools/create-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,mBAAmB;;;CAQ/B,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,MAAM,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EAClD,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAoDjB"}
@@ -0,0 +1,51 @@
1
+ import { z } from "zod";
2
+ import { addProject, readConfigFile, getSession } from "../config.js";
3
+ export const createProjectSchema = {
4
+ project_name: z
5
+ .string()
6
+ .describe("Name for the new project (e.g., 'my-saas-app', 'mobile-app')"),
7
+ session: z
8
+ .string()
9
+ .optional()
10
+ .describe("Session token from infer.events login. If omitted, uses the saved session from ~/.infer/config.json."),
11
+ };
12
+ export async function handleCreateProject(params, endpoint) {
13
+ const config = await readConfigFile();
14
+ // Use provided session, fall back to saved session from config
15
+ let session = params.session;
16
+ if (!session) {
17
+ session = await getSession();
18
+ }
19
+ if (!session) {
20
+ return "No session found. Sign up at https://infer.events/signup first, then run /infer-setup.";
21
+ }
22
+ const baseUrl = config.endpoint ?? endpoint;
23
+ // Call the API to create the project
24
+ const response = await fetch(`${baseUrl}/v1/auth/create-project`, {
25
+ method: "POST",
26
+ headers: { "Content-Type": "application/json" },
27
+ body: JSON.stringify({ session, project_name: params.project_name }),
28
+ });
29
+ if (!response.ok) {
30
+ const body = await response.json().catch(() => ({}));
31
+ return `Failed to create project: ${body.error ?? response.statusText}`;
32
+ }
33
+ const result = await response.json();
34
+ // Save to config
35
+ const slug = params.project_name.toLowerCase().replace(/[^a-z0-9]+/g, "-");
36
+ await addProject(slug, result.read_key, result.project_id, result.write_key, true);
37
+ const lines = [
38
+ `Project "${result.project_name}" created and set as active.`,
39
+ "",
40
+ `Project ID: ${result.project_id}`,
41
+ `Write key: ${result.write_key}`,
42
+ `Read key: ${result.read_key}`,
43
+ "",
44
+ `Saved to ~/.infer/config.json as "${slug}" (now active).`,
45
+ "",
46
+ "Next: Install the SDK in your project with npm install @inferevents/sdk",
47
+ `Then init with: init({ projectId: "${result.write_key}" })`,
48
+ ];
49
+ return lines.join("\n");
50
+ }
51
+ //# sourceMappingURL=create-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-project.js","sourceRoot":"","sources":["../../src/tools/create-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEtE,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,CAAC,8DAA8D,CAAC;IAC3E,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,sGAAsG,CAAC;CACpH,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAkD,EAClD,QAAgB;IAEhB,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;IAEtC,+DAA+D;IAC/D,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;IAC/B,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,wFAAwF,CAAC;IAClG,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC;IAE5C,qCAAqC;IACrC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,yBAAyB,EAAE;QAChE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC;KACrE,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAA4B,CAAC;QAChF,OAAO,6BAA6B,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;IAC1E,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAMjC,CAAC;IAEF,iBAAiB;IACjB,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IAC3E,MAAM,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAEnF,MAAM,KAAK,GAAG;QACZ,YAAY,MAAM,CAAC,YAAY,8BAA8B;QAC7D,EAAE;QACF,gBAAgB,MAAM,CAAC,UAAU,EAAE;QACnC,gBAAgB,MAAM,CAAC,SAAS,EAAE;QAClC,gBAAgB,MAAM,CAAC,QAAQ,EAAE;QACjC,EAAE;QACF,qCAAqC,IAAI,iBAAiB;QAC1D,EAAE;QACF,yEAAyE;QACzE,sCAAsC,MAAM,CAAC,SAAS,MAAM;KAC7D,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { z } from "zod";
2
+ export declare const switchProjectSchema: {
3
+ project_name: z.ZodOptional<z.ZodString>;
4
+ };
5
+ export declare function handleSwitchProject(params: {
6
+ project_name?: string;
7
+ }): Promise<string>;
8
+ //# sourceMappingURL=switch-project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"switch-project.d.ts","sourceRoot":"","sources":["../../src/tools/switch-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,mBAAmB;;CAK/B,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,MAAM,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC,OAAO,CAAC,MAAM,CAAC,CAkBjB"}
@@ -0,0 +1,26 @@
1
+ import { z } from "zod";
2
+ import { listProjects, switchProject } from "../config.js";
3
+ export const switchProjectSchema = {
4
+ project_name: z
5
+ .string()
6
+ .optional()
7
+ .describe("Name of the project to switch to. Omit to list all projects."),
8
+ };
9
+ export async function handleSwitchProject(params) {
10
+ const projects = await listProjects();
11
+ if (!params.project_name) {
12
+ if (projects.length === 0) {
13
+ return "No projects configured. Run /infer-setup to create one.";
14
+ }
15
+ const lines = ["Your Infer projects:", ""];
16
+ for (const p of projects) {
17
+ const marker = p.active ? " (active)" : "";
18
+ lines.push(` ${p.name} — ${p.projectId}${marker}`);
19
+ }
20
+ lines.push("", "To switch: call switch_project with the project name.");
21
+ return lines.join("\n");
22
+ }
23
+ const config = await switchProject(params.project_name);
24
+ return `Switched to project "${params.project_name}" (${config.projectId}). MCP tools now query this project.`;
25
+ }
26
+ //# sourceMappingURL=switch-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"switch-project.js","sourceRoot":"","sources":["../../src/tools/switch-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,8DAA8D,CAAC;CAC5E,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAiC;IAEjC,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IAEtC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,yDAAyD,CAAC;QACnE,CAAC;QACD,MAAM,KAAK,GAAG,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,uDAAuD,CAAC,CAAC;QACxE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACxD,OAAO,wBAAwB,MAAM,CAAC,YAAY,MAAM,MAAM,CAAC,SAAS,sCAAsC,CAAC;AACjH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inferevents/mcp",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "MCP server for Infer analytics — 5 tools including auto-detected insights pushed hourly",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",