@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 +20 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +122 -23
- package/dist/config.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +30 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/create-project.d.ts +10 -0
- package/dist/tools/create-project.d.ts.map +1 -0
- package/dist/tools/create-project.js +51 -0
- package/dist/tools/create-project.js.map +1 -0
- package/dist/tools/switch-project.d.ts +8 -0
- package/dist/tools/switch-project.d.ts.map +1 -0
- package/dist/tools/switch-project.js +26 -0
- package/dist/tools/switch-project.js.map +1 -0
- package/package.json +1 -1
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
|
}
|
package/dist/config.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
|
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
|
-
|
|
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
|
-
"
|
|
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
|
-
|
|
41
|
-
if (
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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) {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -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;
|
|
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) {
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,sEAAsE;AACtE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,sEAAsE;AACtE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,UAAU,YAAY,CAAC,MAAmB;IAC9C,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IAErC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,6DAA6D;IAC7D,oDAAoD;IACpD,2DAA2D;IAE3D,gBAAgB;IAEhB,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,oEAAoE;QAClE,4DAA4D;QAC5D,kEAAkE,EACpE,oBAAoB,EACpB,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACxD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,gFAAgF;QAC9E,qDAAqD;QACrD,iEAAiE;QACjE,0EAA0E,EAC5E,kBAAkB,EAClB,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACtD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,0DAA0D;QACxD,+EAA+E;QAC/E,4CAA4C;QAC5C,6EAA6E;QAC7E,oEAAoE,EACtE,oBAAoB,EACpB,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACxD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,8EAA8E;QAC5E,kFAAkF;QAClF,gEAAgE,EAClE,kBAAkB,EAClB,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACtD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,cAAc,EACd,6DAA6D;QAC3D,qEAAqE;QACrE,6EAA6E;QAC7E,sEAAsE,EACxE,iBAAiB,EACjB,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACrD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,iEAAiE;QAC/D,wEAAwE;QACxE,+CAA+C,EACjD,mBAAmB,EACnB,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAC/C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,2CAA2C;QACzC,8DAA8D;QAC9D,+CAA+C,EACjD,mBAAmB,EACnB,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YAChE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC9B,OAAO,cAAc,KAAK,CAAC,OAAO,EAAE,CAAC;IACvC,CAAC;IACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC;IACD,OAAO,wBAAwB,CAAC;AAClC,CAAC"}
|
|
@@ -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"}
|