@agilemonster/mcp-server 1.0.2 → 1.0.4

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.
@@ -24,4 +24,5 @@ export declare class AgileMonsterOrchestrator {
24
24
  ide?: string;
25
25
  }): Promise<void>;
26
26
  configureIdes(apiKey: string, selectedIde?: string): void;
27
+ private ensureGitignore;
27
28
  }
@@ -106,7 +106,9 @@ export class AgileMonsterOrchestrator {
106
106
  let apiKey = this.client.getApiKey();
107
107
  if (!apiKey) {
108
108
  console.log('šŸ”‘ No Agile Monster API key detected.');
109
- console.log(' Generate an API key in: https://app.agilemonster.com/profile (API Keys tab)\n');
109
+ console.log(' 1. Open: https://app.agilemonster.com/profile?setup=agents');
110
+ console.log(' 2. Click "Generate API key", then "Copy API key"');
111
+ console.log(' 3. Paste it below\n');
110
112
  const readline = await import('node:readline/promises');
111
113
  const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
112
114
  try {
@@ -155,7 +157,18 @@ export class AgileMonsterOrchestrator {
155
157
  }
156
158
  // Configure IDEs (Cursor, Claude Code, Windsurf, Antigravity, VS Code)
157
159
  this.configureIdes(apiKey, options?.provider);
158
- console.log('\nšŸŽ‰ Project successfully configured for AI Agents (Cursor, Claude Code, Antigravity, Windsurf)!');
160
+ this.ensureGitignore();
161
+ console.log('\nšŸŽ‰ Project successfully configured for AI Agents!');
162
+ console.log('\n======================================================');
163
+ console.log(' šŸš€ HOW TO USE IT NOW ');
164
+ console.log('======================================================');
165
+ console.log(`1. In Agile Monster (https://app.agilemonster.com), open board "${targetBoard.name}".`);
166
+ console.log('2. Create or open any card and assign it to your AI Agent (e.g. Antigravity, Cursor, Claude Code).');
167
+ console.log('3. In your AI IDE chat, simply say:');
168
+ console.log(' "Check my Agile Monster tasks and start the next queued card."');
169
+ console.log(' Or from your terminal anytime:');
170
+ console.log(' • Check board & queued tasks: npx -y @agilemonster/mcp-server status');
171
+ console.log(' • Auto-watch & run daemon: npx -y @agilemonster/mcp-server watch\n');
159
172
  }
160
173
  async bootstrapInteractive(options) {
161
174
  return this.initInteractive(options);
@@ -250,25 +263,33 @@ export class AgileMonsterOrchestrator {
250
263
  }
251
264
  catch { }
252
265
  }
253
- // 4. Antigravity / Gemini (~/.gemini/antigravity/mcp/agilemonster.json)
266
+ // 4. Antigravity / Gemini (~/.gemini/config/mcp_config.json)
254
267
  if ((ide === 'all' || ide === 'antigravity' || ide === 'gemini') && homedir) {
255
268
  try {
256
- const antigravityDir = path.join(homedir, '.gemini', 'antigravity', 'mcp');
257
- const antigravityMcpPath = path.join(antigravityDir, 'agilemonster.json');
258
- if (fs.existsSync(antigravityDir) || ide === 'antigravity') {
259
- if (!fs.existsSync(antigravityDir))
260
- fs.mkdirSync(antigravityDir, { recursive: true });
261
- const config = {
262
- command: 'npx',
263
- args: ['-y', '@agilemonster/mcp-server'],
264
- env: {
265
- AGILEMONSTER_API_KEY: apiKey,
266
- AGILEMONSTER_API_URL: 'https://api.agilemonster.com',
267
- },
268
- };
269
- fs.writeFileSync(antigravityMcpPath, JSON.stringify(config, null, 2), 'utf8');
270
- console.log(`šŸ¤– Configured Antigravity in: ~/.gemini/antigravity/mcp/agilemonster.json`);
269
+ const antigravityDir = path.join(homedir, '.gemini', 'config');
270
+ const antigravityMcpPath = path.join(antigravityDir, 'mcp_config.json');
271
+ if (!fs.existsSync(antigravityDir))
272
+ fs.mkdirSync(antigravityDir, { recursive: true });
273
+ let existing = { mcpServers: {} };
274
+ if (fs.existsSync(antigravityMcpPath)) {
275
+ try {
276
+ const raw = fs.readFileSync(antigravityMcpPath, 'utf8').trim();
277
+ if (raw)
278
+ existing = JSON.parse(raw);
279
+ }
280
+ catch { }
271
281
  }
282
+ existing.mcpServers = existing.mcpServers || {};
283
+ existing.mcpServers.agilemonster = {
284
+ command: 'npx',
285
+ args: ['-y', '@agilemonster/mcp-server'],
286
+ env: {
287
+ AGILEMONSTER_API_KEY: apiKey,
288
+ AGILEMONSTER_API_URL: 'https://api.agilemonster.com',
289
+ },
290
+ };
291
+ fs.writeFileSync(antigravityMcpPath, JSON.stringify(existing, null, 2), 'utf8');
292
+ console.log(`šŸ¤– Configured Antigravity in: ~/.gemini/config/mcp_config.json`);
272
293
  }
273
294
  catch { }
274
295
  }
@@ -303,4 +324,19 @@ export class AgileMonsterOrchestrator {
303
324
  catch { }
304
325
  }
305
326
  }
327
+ ensureGitignore() {
328
+ try {
329
+ const gitignorePath = path.resolve(process.cwd(), '.gitignore');
330
+ if (!fs.existsSync(gitignorePath))
331
+ return;
332
+ const content = fs.readFileSync(gitignorePath, 'utf8');
333
+ const entries = ['.agilemonster.json', '.cursor/mcp.json', '.mcp.json'];
334
+ const missing = entries.filter((e) => !content.split(/\r?\n/).includes(e));
335
+ if (missing.length > 0) {
336
+ const prefix = content.endsWith('\n') ? '' : '\n';
337
+ fs.appendFileSync(gitignorePath, `${prefix}\n# Agile Monster local agent config (contains personal API key)\n${missing.join('\n')}\n`, 'utf8');
338
+ }
339
+ }
340
+ catch { }
341
+ }
306
342
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agilemonster/mcp-server",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "type": "module",
5
5
  "description": "Official Model Context Protocol (MCP) server & Orchestrator for Agile Monster (Cursor, Claude Code, Antigravity, Codex, Hermes, Windsurf)",
6
6
  "main": "dist/server.js",