@teamlens/mcp-server 0.1.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.
@@ -0,0 +1,14 @@
1
+ /**
2
+ * TeamLens MCP Server.
3
+ *
4
+ * Exposes session-aware tools over stdio transport so any MCP-compatible
5
+ * agent (Claude Code, Cursor, etc.) can track sessions and share insights.
6
+ *
7
+ * Auto-starts with the AI agent, auto-creates sessions on first interaction.
8
+ *
9
+ * Usage:
10
+ * teamlens serve # starts MCP server on stdio
11
+ * teamlens watch # starts watcher + MCP server
12
+ */
13
+ export declare function startMcpServer(repoPath: string): Promise<void>;
14
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuJpE"}
package/dist/server.js ADDED
@@ -0,0 +1,150 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { z } from 'zod';
4
+ import { TeamLens } from '@teamlens/core';
5
+ import { createMemoryTools } from './tools/memory-tools.js';
6
+ /**
7
+ * TeamLens MCP Server.
8
+ *
9
+ * Exposes session-aware tools over stdio transport so any MCP-compatible
10
+ * agent (Claude Code, Cursor, etc.) can track sessions and share insights.
11
+ *
12
+ * Auto-starts with the AI agent, auto-creates sessions on first interaction.
13
+ *
14
+ * Usage:
15
+ * teamlens serve # starts MCP server on stdio
16
+ * teamlens watch # starts watcher + MCP server
17
+ */
18
+ export async function startMcpServer(repoPath) {
19
+ // Auto-detect: if .teamlens/ doesn't exist, this project hasn't been set up.
20
+ // Create it silently so the MCP server always starts (prevents Claude Code errors).
21
+ const tl = await TeamLens.create(repoPath);
22
+ // Auto-pull from git and import teammates' insights
23
+ const { pulled, imported } = tl.team.autoGitPullAndImport();
24
+ if (pulled || imported > 0) {
25
+ process.stderr.write(`TeamLens: git pull ${pulled ? 'ok' : 'skipped'}, imported ${imported} new insight(s)\n`);
26
+ }
27
+ // Cleanup stale sessions from previous runs
28
+ tl.sessions.cleanupStaleSessions();
29
+ const server = new McpServer({
30
+ name: 'teamlens',
31
+ version: '0.1.0',
32
+ });
33
+ // Register all tools
34
+ const tools = createMemoryTools(tl);
35
+ for (const tool of tools) {
36
+ // Build zod schema from the JSON schema definition
37
+ const zodShape = {};
38
+ const props = tool.inputSchema.properties ?? {};
39
+ const required = tool.inputSchema.required ?? [];
40
+ for (const [key, schema] of Object.entries(props)) {
41
+ let field;
42
+ if (schema.type === 'string') {
43
+ field = schema.enum ? z.enum(schema.enum) : z.string();
44
+ }
45
+ else if (schema.type === 'number') {
46
+ field = z.number();
47
+ }
48
+ else if (schema.type === 'boolean') {
49
+ field = z.boolean();
50
+ }
51
+ else if (schema.type === 'array') {
52
+ field = z.array(z.string());
53
+ }
54
+ else {
55
+ field = z.any();
56
+ }
57
+ if (!required.includes(key)) {
58
+ field = field.optional();
59
+ }
60
+ zodShape[key] = field.describe(schema.description ?? '');
61
+ }
62
+ server.tool(tool.name, tool.description, zodShape, async (args) => {
63
+ try {
64
+ // Ingest hook events before each tool call
65
+ try {
66
+ tl.sessions.ingestHookEvents(repoPath);
67
+ }
68
+ catch { /* non-fatal */ }
69
+ const result = await tool.handler(args);
70
+ return {
71
+ content: [
72
+ {
73
+ type: 'text',
74
+ text: JSON.stringify(result, null, 2),
75
+ },
76
+ ],
77
+ };
78
+ }
79
+ catch (err) {
80
+ const message = err instanceof Error ? err.message : String(err);
81
+ return {
82
+ content: [{ type: 'text', text: `Error: ${message}` }],
83
+ isError: true,
84
+ };
85
+ }
86
+ });
87
+ }
88
+ // Register MCP Resources
89
+ server.resource('teamlens://context', 'teamlens://context', async () => {
90
+ const context = tl.sessions.getTeamContext(10);
91
+ return {
92
+ contents: [{
93
+ uri: 'teamlens://context',
94
+ text: JSON.stringify(context.map(m => ({
95
+ content: m.content,
96
+ category: m.category,
97
+ author: m.author,
98
+ createdAt: m.createdAt,
99
+ })), null, 2),
100
+ mimeType: 'application/json',
101
+ }],
102
+ };
103
+ });
104
+ server.resource('teamlens://feed', 'teamlens://feed', async () => {
105
+ const insights = tl.db.getRecentInsights(20);
106
+ return {
107
+ contents: [{
108
+ uri: 'teamlens://feed',
109
+ text: JSON.stringify(insights.map(m => ({
110
+ content: m.content,
111
+ category: m.category,
112
+ author: m.author,
113
+ relatedFiles: m.relatedFiles,
114
+ createdAt: m.createdAt,
115
+ })), null, 2),
116
+ mimeType: 'application/json',
117
+ }],
118
+ };
119
+ });
120
+ // Start stdio transport
121
+ const transport = new StdioServerTransport();
122
+ await server.connect(transport);
123
+ // Auto-create a session immediately so the dashboard shows activity
124
+ // even if the AI doesn't explicitly call any TeamLens tools
125
+ try {
126
+ const session = tl.sessions.getOrCreateSession('auto');
127
+ process.stderr.write(`TeamLens: session ${session.id.slice(0, 8)}... started\n`);
128
+ }
129
+ catch {
130
+ // Non-fatal — session will be created on first tool call
131
+ }
132
+ // Auto-end session on disconnect
133
+ process.on('SIGINT', () => {
134
+ const session = tl.sessions.getActiveSession();
135
+ if (session) {
136
+ tl.sessions.endSession(session.id, 'Agent disconnected');
137
+ }
138
+ tl.close();
139
+ process.exit(0);
140
+ });
141
+ process.on('SIGTERM', () => {
142
+ const session = tl.sessions.getActiveSession();
143
+ if (session) {
144
+ tl.sessions.endSession(session.id, 'Agent disconnected');
145
+ }
146
+ tl.close();
147
+ process.exit(0);
148
+ });
149
+ }
150
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { TeamLens } from '@teamlens/core';
2
+ export interface ToolDefinition {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: Record<string, unknown>;
6
+ handler: (args: Record<string, unknown>) => Promise<unknown>;
7
+ }
8
+ export declare function createMemoryTools(tl: TeamLens): ToolDefinition[];
9
+ //# sourceMappingURL=memory-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-tools.d.ts","sourceRoot":"","sources":["../../src/tools/memory-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9D;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,GAAG,cAAc,EAAE,CA2bhE"}
@@ -0,0 +1,393 @@
1
+ export function createMemoryTools(tl) {
2
+ return [
3
+ // ── Session Tools ──
4
+ {
5
+ name: 'start_session',
6
+ description: 'Optional — begin a new session with task context. Sessions are auto-created on first tool interaction, so this is only needed if you want to set a specific task description.',
7
+ inputSchema: {
8
+ type: 'object',
9
+ properties: {
10
+ task: {
11
+ type: 'string',
12
+ description: 'What you are working on (e.g., "fixing auth bug in login flow")',
13
+ },
14
+ tool_name: {
15
+ type: 'string',
16
+ description: 'Name of the AI tool (e.g., "claude-code", "cursor")',
17
+ },
18
+ },
19
+ },
20
+ handler: async (args) => {
21
+ const session = tl.sessions.startSession(args.task, args.tool_name);
22
+ // Get team context for injection
23
+ const teamContext = tl.sessions.getTeamContext(5);
24
+ return {
25
+ sessionId: session.id,
26
+ developer: session.developer,
27
+ status: 'active',
28
+ teamContext: teamContext.map(m => ({
29
+ content: m.content,
30
+ category: m.category,
31
+ author: m.author,
32
+ })),
33
+ };
34
+ },
35
+ },
36
+ {
37
+ name: 'share_insight',
38
+ description: 'Share a learning or discovery with the team. Use this when you discover something important — gotchas, conventions, architecture patterns, dependency issues, or decisions. Type is auto-detected. Works without explicit start_session.',
39
+ inputSchema: {
40
+ type: 'object',
41
+ properties: {
42
+ content: {
43
+ type: 'string',
44
+ description: 'The insight to share (e.g., "The auth module silently swallows 401 errors — always check response.ok")',
45
+ },
46
+ related_files: {
47
+ type: 'array',
48
+ items: { type: 'string' },
49
+ description: 'File paths this insight relates to',
50
+ },
51
+ tags: {
52
+ type: 'array',
53
+ items: { type: 'string' },
54
+ description: 'Optional tags for organization',
55
+ },
56
+ },
57
+ required: ['content'],
58
+ },
59
+ handler: async (args) => {
60
+ const result = await tl.sessions.shareInsight(args.content, args.related_files ?? [], args.tags ?? []);
61
+ const response = {
62
+ memoryId: result.memoryId,
63
+ insightType: result.insightType,
64
+ sessionId: result.sessionId,
65
+ status: 'shared',
66
+ };
67
+ // If this is the first interaction (auto-session just created), inject team context
68
+ if (tl.sessions.wasSessionJustCreated()) {
69
+ const teamContext = tl.sessions.getTeamContext(5);
70
+ if (teamContext.length > 0) {
71
+ response.teamContext = teamContext.map(m => ({
72
+ content: m.content,
73
+ category: m.category,
74
+ author: m.author,
75
+ }));
76
+ response.message = `Session auto-started. Here are ${teamContext.length} recent insights from your team:`;
77
+ }
78
+ }
79
+ return response;
80
+ },
81
+ },
82
+ {
83
+ name: 'log_activity',
84
+ description: 'Record what you are doing during this session. Helps track activity patterns and feeds into analytics.',
85
+ inputSchema: {
86
+ type: 'object',
87
+ properties: {
88
+ type: {
89
+ type: 'string',
90
+ enum: ['debug', 'refactor', 'file_edit', 'review', 'test', 'research', 'implementation', 'other'],
91
+ description: 'Type of activity',
92
+ },
93
+ description: {
94
+ type: 'string',
95
+ description: 'Brief description of the activity',
96
+ },
97
+ files: {
98
+ type: 'array',
99
+ items: { type: 'string' },
100
+ description: 'Files involved in this activity',
101
+ },
102
+ },
103
+ required: ['type'],
104
+ },
105
+ handler: async (args) => {
106
+ const result = tl.sessions.logActivity(args.type, args.description, args.files ?? []);
107
+ const response = {
108
+ eventId: result.eventId,
109
+ sessionId: result.sessionId,
110
+ status: 'logged',
111
+ };
112
+ // If this is the first interaction (auto-session just created), inject team context
113
+ if (tl.sessions.wasSessionJustCreated()) {
114
+ const teamContext = tl.sessions.getTeamContext(5);
115
+ if (teamContext.length > 0) {
116
+ response.teamContext = teamContext.map(m => ({
117
+ content: m.content,
118
+ category: m.category,
119
+ author: m.author,
120
+ }));
121
+ response.message = `Session auto-started. Here are ${teamContext.length} recent insights from your team:`;
122
+ }
123
+ }
124
+ return response;
125
+ },
126
+ },
127
+ {
128
+ name: 'end_session',
129
+ description: 'End the current session with an optional summary. Sessions also auto-end when the agent disconnects.',
130
+ inputSchema: {
131
+ type: 'object',
132
+ properties: {
133
+ summary: {
134
+ type: 'string',
135
+ description: 'Brief summary of what was accomplished',
136
+ },
137
+ },
138
+ },
139
+ handler: async (args) => {
140
+ const session = tl.sessions.endSession(undefined, args.summary);
141
+ if (!session)
142
+ return { error: 'No active session to end' };
143
+ return {
144
+ sessionId: session.id,
145
+ duration: session.durationSeconds,
146
+ insightsShared: session.insightCount,
147
+ activitiesLogged: session.activityCount,
148
+ status: 'completed',
149
+ };
150
+ },
151
+ },
152
+ // ── Query Tools ──
153
+ {
154
+ name: 'ask',
155
+ description: 'Query team knowledge — search insights, conventions, decisions, and learnings from all teammates. Replaces get_context and get_team_context.',
156
+ inputSchema: {
157
+ type: 'object',
158
+ properties: {
159
+ query: {
160
+ type: 'string',
161
+ description: 'What you want to know (e.g., "how does payment processing work?")',
162
+ },
163
+ scope: {
164
+ type: 'string',
165
+ description: 'Optional directory path to narrow results (e.g., "src/auth/")',
166
+ },
167
+ limit: {
168
+ type: 'number',
169
+ description: 'Max number of results (default: 10)',
170
+ },
171
+ },
172
+ required: ['query'],
173
+ },
174
+ handler: async (args) => {
175
+ const results = await tl.query(args.query, args.scope, args.limit);
176
+ // Track reuse of insights — only count when a DIFFERENT developer queries
177
+ const currentDeveloper = tl.config.developer !== 'unknown' ? tl.config.developer : tl.config.author;
178
+ for (const r of results) {
179
+ if (r.memory.tier === 'team' && r.memory.author !== currentDeveloper) {
180
+ tl.db.incrementReuseCount(r.memory.id);
181
+ }
182
+ }
183
+ const response = results.map((r) => ({
184
+ content: r.memory.content,
185
+ category: r.memory.category,
186
+ tier: r.memory.tier,
187
+ author: r.memory.author,
188
+ relatedFiles: r.memory.relatedFiles,
189
+ score: Math.round(r.score * 100) / 100,
190
+ fromTeammate: r.memory.author !== currentDeveloper,
191
+ }));
192
+ // If this is the first interaction (auto-session just created), inject team context
193
+ if (tl.sessions.wasSessionJustCreated()) {
194
+ const teamContext = tl.sessions.getTeamContext(5);
195
+ if (teamContext.length > 0) {
196
+ return {
197
+ results: response,
198
+ teamContext: teamContext.map(m => ({
199
+ content: m.content,
200
+ category: m.category,
201
+ author: m.author,
202
+ })),
203
+ message: `Session auto-started. Here are ${teamContext.length} recent insights from your team:`,
204
+ };
205
+ }
206
+ }
207
+ return response;
208
+ },
209
+ },
210
+ {
211
+ name: 'analytics',
212
+ description: 'Get ROI metrics, usage trends, and contributor leaderboard. Great for understanding team AI effectiveness.',
213
+ inputSchema: {
214
+ type: 'object',
215
+ properties: {
216
+ days: {
217
+ type: 'number',
218
+ description: 'Number of days to include in trends (default: 30)',
219
+ },
220
+ },
221
+ },
222
+ handler: async (args) => {
223
+ const days = args.days ?? 30;
224
+ return tl.analytics.getTeamAnalytics(days);
225
+ },
226
+ },
227
+ {
228
+ name: 'status',
229
+ description: 'Get current session state, memory stats, and a quick overview of team activity.',
230
+ inputSchema: {
231
+ type: 'object',
232
+ properties: {},
233
+ },
234
+ handler: async () => {
235
+ const session = tl.sessions.getActiveSession();
236
+ const stats = tl.stats();
237
+ const overview = tl.analytics.getOverview();
238
+ return {
239
+ session: session ? {
240
+ id: session.id,
241
+ task: session.task,
242
+ duration: session.durationSeconds,
243
+ insights: session.insightCount,
244
+ activities: session.activityCount,
245
+ } : null,
246
+ memories: stats,
247
+ today: overview.today,
248
+ week: overview.week,
249
+ };
250
+ },
251
+ },
252
+ // ── Knowledge Tools (kept from CodeMemory) ──
253
+ {
254
+ name: 'get_conventions',
255
+ description: 'Get all project conventions — naming rules, code patterns, style guidelines, and team agreements.',
256
+ inputSchema: {
257
+ type: 'object',
258
+ properties: {},
259
+ },
260
+ handler: async () => {
261
+ const conventions = await tl.getConventions();
262
+ return conventions.map((m) => ({
263
+ content: m.content,
264
+ tags: m.tags,
265
+ relatedFiles: m.relatedFiles,
266
+ }));
267
+ },
268
+ },
269
+ {
270
+ name: 'who_knows',
271
+ description: 'Find which team members have context about a topic. Returns authors ranked by how many relevant memories they have.',
272
+ inputSchema: {
273
+ type: 'object',
274
+ properties: {
275
+ query: {
276
+ type: 'string',
277
+ description: 'The topic to find expertise about (e.g., "authentication", "payment processing")',
278
+ },
279
+ },
280
+ required: ['query'],
281
+ },
282
+ handler: async (args) => {
283
+ return tl.whoKnows(args.query);
284
+ },
285
+ },
286
+ // ── Governance Tools ──
287
+ {
288
+ name: 'get_rules',
289
+ description: 'Get active team AI rules, optionally filtered by file path (scope matching) and category.',
290
+ inputSchema: {
291
+ type: 'object',
292
+ properties: {
293
+ file_path: {
294
+ type: 'string',
295
+ description: 'Optional file path to get rules that apply to it (via scope glob matching)',
296
+ },
297
+ category: {
298
+ type: 'string',
299
+ enum: ['architecture', 'convention', 'decision', 'correction', 'active_context', 'discovery', 'gotcha', 'dependency'],
300
+ description: 'Optional category filter',
301
+ },
302
+ include_inactive: {
303
+ type: 'boolean',
304
+ description: 'Include disabled rules (default: false)',
305
+ },
306
+ },
307
+ },
308
+ handler: async (args) => {
309
+ let rules = args.file_path
310
+ ? tl.db.getRulesForFile(args.file_path)
311
+ : tl.db.getRules(args.include_inactive ?? false);
312
+ if (args.category) {
313
+ rules = rules.filter((r) => r.category === args.category);
314
+ }
315
+ return rules.map((r) => ({
316
+ id: r.id,
317
+ content: r.content,
318
+ category: r.category,
319
+ priority: r.priority ?? 'normal',
320
+ scope: r.scope,
321
+ active: r.active,
322
+ examples: r.examples,
323
+ }));
324
+ },
325
+ },
326
+ {
327
+ name: 'add_rule',
328
+ description: 'Define a new team AI rule with category, scope, priority, and optional code examples. Rules are distributed to all agent config files.',
329
+ inputSchema: {
330
+ type: 'object',
331
+ properties: {
332
+ content: {
333
+ type: 'string',
334
+ description: 'The rule text (e.g., "Use camelCase for variable names")',
335
+ },
336
+ category: {
337
+ type: 'string',
338
+ enum: ['architecture', 'convention', 'decision', 'correction', 'active_context', 'discovery', 'gotcha', 'dependency'],
339
+ description: 'Rule category',
340
+ },
341
+ scope: {
342
+ type: 'array',
343
+ items: { type: 'string' },
344
+ description: 'Glob patterns this rule applies to (e.g., ["src/**/*.ts"]). Omit for global rules.',
345
+ },
346
+ priority: {
347
+ type: 'string',
348
+ enum: ['critical', 'high', 'normal', 'low'],
349
+ description: 'Rule priority (default: normal)',
350
+ },
351
+ good_example: {
352
+ type: 'string',
353
+ description: 'Example of correct code',
354
+ },
355
+ bad_example: {
356
+ type: 'string',
357
+ description: 'Example of incorrect code',
358
+ },
359
+ },
360
+ required: ['content', 'category'],
361
+ },
362
+ handler: async (args) => {
363
+ const id = await tl.addRule(args.content, args.category, {
364
+ scope: args.scope,
365
+ priority: args.priority ?? 'normal',
366
+ good: args.good_example,
367
+ bad: args.bad_example,
368
+ });
369
+ return { id, status: 'rule_added' };
370
+ },
371
+ },
372
+ {
373
+ name: 'distribute_rules',
374
+ description: 'Generate agent config files (CLAUDE.md, .cursor/rules/, AGENTS.md, copilot-instructions.md) from the current rules and recent insights.',
375
+ inputSchema: {
376
+ type: 'object',
377
+ properties: {
378
+ targets: {
379
+ type: 'array',
380
+ items: { type: 'string' },
381
+ description: 'Specific targets to generate (default: auto-detect). Options: claude, cursor, copilot, agents_md',
382
+ },
383
+ },
384
+ },
385
+ handler: async (args) => {
386
+ const targets = args.targets;
387
+ const { generated, warnings } = tl.distribute(targets);
388
+ return { generated, warnings, status: 'distributed' };
389
+ },
390
+ },
391
+ ];
392
+ }
393
+ //# sourceMappingURL=memory-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-tools.js","sourceRoot":"","sources":["../../src/tools/memory-tools.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@teamlens/mcp-server",
3
+ "version": "0.1.0",
4
+ "description": "TeamLens MCP server — exposes session-aware tools to AI agents",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/sanketbabar/teamlens",
10
+ "directory": "packages/mcp-server"
11
+ },
12
+ "publishConfig": {
13
+ "access": "public"
14
+ },
15
+ "files": [
16
+ "dist/"
17
+ ],
18
+ "main": "dist/server.js",
19
+ "types": "dist/server.d.ts",
20
+ "dependencies": {
21
+ "@modelcontextprotocol/sdk": "^1.6.0",
22
+ "zod": "^3.24.0",
23
+ "@teamlens/core": "0.1.0"
24
+ },
25
+ "devDependencies": {
26
+ "typescript": "^5.7.0"
27
+ },
28
+ "scripts": {
29
+ "build": "tsc",
30
+ "dev": "tsc --watch",
31
+ "clean": "rm -rf dist .tsbuildinfo"
32
+ }
33
+ }