acuity-mcp-server 1.0.1 → 1.0.3
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/bin/acuity-mcp.cjs +38 -0
- package/bin/acuity-mcp.cmd +109 -0
- package/bin/acuity-mcp.sh +156 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +61 -584
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts +7 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +593 -0
- package/dist/main.js.map +1 -0
- package/package.json +6 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/main.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAGH,OAAO,eAAe,CAAC"}
|
package/dist/main.js
ADDED
|
@@ -0,0 +1,593 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Acuity MCP Server
|
|
4
|
+
* Enables LLM access to Acuity project management data
|
|
5
|
+
*/
|
|
6
|
+
// Load .env.development for local development
|
|
7
|
+
import 'dotenv/config';
|
|
8
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
9
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
10
|
+
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
11
|
+
import { validateJWT } from './auth/jwt-validator.js';
|
|
12
|
+
import { runDeviceFlow, refreshAccessToken } from './auth/device-flow.js';
|
|
13
|
+
import { saveCredentials, loadCredentials, clearCredentials, getValidIdToken, tokenResponseToCredentials } from './auth/token-storage.js';
|
|
14
|
+
import { HasuraClient } from './clients/hasura-client.js';
|
|
15
|
+
import { acuityInit, acuityInitTool } from './tools/acuity-init.js';
|
|
16
|
+
import { listProjects, listProjectsTool } from './tools/list-projects.js';
|
|
17
|
+
import { getProject, getProjectTool } from './tools/get-project.js';
|
|
18
|
+
import { getStatusReports, getStatusReportsTool } from './tools/get-status-reports.js';
|
|
19
|
+
import { listRisks, listRisksTool } from './tools/list-risks.js';
|
|
20
|
+
import { getRisk, getRiskTool } from './tools/get-risk.js';
|
|
21
|
+
import { listIssues, listIssuesTool } from './tools/list-issues.js';
|
|
22
|
+
import { getIssue, getIssueTool } from './tools/get-issue.js';
|
|
23
|
+
import { listLessonsLearned, listLessonsLearnedTool } from './tools/list-lessons-learned.js';
|
|
24
|
+
import { getLessonLearned, getLessonLearnedTool } from './tools/get-lesson-learned.js';
|
|
25
|
+
import { getLookupValues, getLookupValuesTool } from './tools/get-lookup-values.js';
|
|
26
|
+
import { searchProjects, searchProjectsTool } from './tools/search-projects.js';
|
|
27
|
+
import { getDashboardSummary, getDashboardSummaryTool } from './tools/get-dashboard-summary.js';
|
|
28
|
+
import { startHttpServer } from './server/http-server.js';
|
|
29
|
+
// Session state - persists while MCP server is running
|
|
30
|
+
let sessionInitData = null;
|
|
31
|
+
import { initAuthTool, logoutTool, authStatusTool, initAuth, logout, getAuthStatus } from './tools/init-auth.js';
|
|
32
|
+
import { getEnvironment, listEnvironments } from './config/environments.js';
|
|
33
|
+
/**
|
|
34
|
+
* Get Auth0 configuration from current environment
|
|
35
|
+
* Uses ACUITY_ENV to determine which environment to use
|
|
36
|
+
*/
|
|
37
|
+
function getAuth0Config() {
|
|
38
|
+
const env = getEnvironment();
|
|
39
|
+
return {
|
|
40
|
+
domain: env.auth0Domain,
|
|
41
|
+
clientId: env.auth0ClientId,
|
|
42
|
+
audience: process.env.AUTH0_AUDIENCE,
|
|
43
|
+
scope: 'openid profile email offline_access',
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Handle 'init' command - authenticate via Device Flow
|
|
48
|
+
*/
|
|
49
|
+
async function handleInit() {
|
|
50
|
+
console.log('\n=== Acuity MCP Server - Authentication Setup ===\n');
|
|
51
|
+
try {
|
|
52
|
+
const config = getAuth0Config();
|
|
53
|
+
const token = await runDeviceFlow(config);
|
|
54
|
+
// Extract email from id_token if available
|
|
55
|
+
let email;
|
|
56
|
+
if (token.id_token) {
|
|
57
|
+
try {
|
|
58
|
+
const payload = JSON.parse(Buffer.from(token.id_token.split('.')[1], 'base64').toString());
|
|
59
|
+
email = payload.email || payload['https://acuity.com/email'] || payload['https://acuityppm.com/email'];
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// Ignore parsing errors
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Save credentials to keychain
|
|
66
|
+
const credentials = tokenResponseToCredentials(token, email);
|
|
67
|
+
await saveCredentials(credentials);
|
|
68
|
+
console.log('='.repeat(50));
|
|
69
|
+
console.log('Authentication successful!');
|
|
70
|
+
if (email) {
|
|
71
|
+
console.log(`Logged in as: ${email}`);
|
|
72
|
+
}
|
|
73
|
+
console.log('Credentials stored securely in system keychain.');
|
|
74
|
+
console.log('='.repeat(50));
|
|
75
|
+
console.log('\nYou can now use the MCP server with Claude Desktop or other clients.');
|
|
76
|
+
console.log('No need to configure USER_JWT anymore!\n');
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
console.error('\nAuthentication failed:', error instanceof Error ? error.message : String(error));
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Handle 'logout' command - clear stored credentials
|
|
85
|
+
*/
|
|
86
|
+
async function handleLogout() {
|
|
87
|
+
console.log('\n=== Acuity MCP Server - Logout ===\n');
|
|
88
|
+
const deleted = await clearCredentials();
|
|
89
|
+
if (deleted) {
|
|
90
|
+
console.log('Credentials removed from system keychain.');
|
|
91
|
+
console.log('Run "init" to authenticate again.\n');
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
console.log('No credentials found to remove.\n');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Handle 'status' command - show current authentication status
|
|
99
|
+
*/
|
|
100
|
+
async function handleStatus() {
|
|
101
|
+
console.log('\n=== Acuity MCP Server - Status ===\n');
|
|
102
|
+
const creds = await loadCredentials();
|
|
103
|
+
if (!creds) {
|
|
104
|
+
console.log('Status: Not authenticated');
|
|
105
|
+
console.log('Run "init" to authenticate.\n');
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const now = Math.floor(Date.now() / 1000);
|
|
109
|
+
const isExpired = creds.expiresAt <= now;
|
|
110
|
+
const expiresIn = creds.expiresAt - now;
|
|
111
|
+
console.log(`Status: Authenticated`);
|
|
112
|
+
if (creds.email) {
|
|
113
|
+
console.log(`Email: ${creds.email}`);
|
|
114
|
+
}
|
|
115
|
+
console.log(`Token expires: ${isExpired ? 'EXPIRED' : `in ${Math.floor(expiresIn / 60)} minutes`}`);
|
|
116
|
+
console.log(`Refresh token: ${creds.refreshToken ? 'Available' : 'Not available'}`);
|
|
117
|
+
console.log('');
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Get access token for MCP operations
|
|
121
|
+
* Supports both legacy USER_JWT env var and new Device Flow
|
|
122
|
+
*/
|
|
123
|
+
async function getAccessToken() {
|
|
124
|
+
// Legacy: Check for USER_JWT environment variable first
|
|
125
|
+
const legacyToken = process.env.USER_JWT || process.env.JWT_TOKEN;
|
|
126
|
+
if (legacyToken) {
|
|
127
|
+
const { email } = await validateJWT(legacyToken);
|
|
128
|
+
return { token: legacyToken, email };
|
|
129
|
+
}
|
|
130
|
+
// New: Use stored credentials from keychain
|
|
131
|
+
const config = getAuth0Config();
|
|
132
|
+
const refreshFn = async (refreshToken) => {
|
|
133
|
+
return refreshAccessToken(config, refreshToken);
|
|
134
|
+
};
|
|
135
|
+
const idToken = await getValidIdToken(refreshFn);
|
|
136
|
+
// Get email from stored credentials
|
|
137
|
+
const creds = await loadCredentials();
|
|
138
|
+
const email = creds?.email;
|
|
139
|
+
if (!email) {
|
|
140
|
+
// Try to extract from id token or validate to get email
|
|
141
|
+
try {
|
|
142
|
+
const { email: validatedEmail } = await validateJWT(idToken);
|
|
143
|
+
return { token: idToken, email: validatedEmail };
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
throw new Error('Could not determine user email from credentials');
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return { token: idToken, email };
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* MCP Server instance
|
|
153
|
+
*/
|
|
154
|
+
const server = new Server({
|
|
155
|
+
name: 'acuity-mcp-server',
|
|
156
|
+
version: '1.0.0'
|
|
157
|
+
}, {
|
|
158
|
+
capabilities: {
|
|
159
|
+
tools: {}
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
/**
|
|
163
|
+
* List available tools
|
|
164
|
+
*/
|
|
165
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
166
|
+
return {
|
|
167
|
+
tools: [
|
|
168
|
+
initAuthTool,
|
|
169
|
+
authStatusTool,
|
|
170
|
+
logoutTool,
|
|
171
|
+
acuityInitTool,
|
|
172
|
+
listProjectsTool,
|
|
173
|
+
getProjectTool,
|
|
174
|
+
searchProjectsTool,
|
|
175
|
+
getStatusReportsTool,
|
|
176
|
+
listRisksTool,
|
|
177
|
+
getRiskTool,
|
|
178
|
+
listIssuesTool,
|
|
179
|
+
getIssueTool,
|
|
180
|
+
listLessonsLearnedTool,
|
|
181
|
+
getLessonLearnedTool,
|
|
182
|
+
getLookupValuesTool,
|
|
183
|
+
getDashboardSummaryTool
|
|
184
|
+
]
|
|
185
|
+
};
|
|
186
|
+
});
|
|
187
|
+
/**
|
|
188
|
+
* Handle tool execution
|
|
189
|
+
*/
|
|
190
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
191
|
+
const { name } = request.params;
|
|
192
|
+
try {
|
|
193
|
+
// Auth tools don't require authentication
|
|
194
|
+
switch (name) {
|
|
195
|
+
case 'acuity_login': {
|
|
196
|
+
const result = await initAuth();
|
|
197
|
+
// If login was successful, auto-initialize context
|
|
198
|
+
if (result.includes('Login Successful')) {
|
|
199
|
+
try {
|
|
200
|
+
const { token, email } = await getAccessToken();
|
|
201
|
+
const hasuraClient = HasuraClient.forUser(email, token);
|
|
202
|
+
sessionInitData = await acuityInit(hasuraClient);
|
|
203
|
+
// Append initialization summary to login result
|
|
204
|
+
const initSummary = `
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
📊 **Acuity Data Initialized**
|
|
208
|
+
|
|
209
|
+
Company: ${sessionInitData.company}
|
|
210
|
+
Projects: ${sessionInitData.entities.projects.count} | Proposals: ${sessionInitData.entities.proposals.count}
|
|
211
|
+
Risks: ${sessionInitData.entities.project_risks.count} (project) + ${sessionInitData.entities.proposal_risks.count} (proposal)
|
|
212
|
+
Issues: ${sessionInitData.entities.project_issues.count} (project) + ${sessionInitData.entities.proposal_issues.count} (proposal)
|
|
213
|
+
Status Reports: ${sessionInitData.entities.status_reports.count}
|
|
214
|
+
|
|
215
|
+
Ready to help! Try: "Show me active projects" or "List projects with red health status"`;
|
|
216
|
+
return {
|
|
217
|
+
content: [{ type: 'text', text: result + initSummary }]
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
catch (initError) {
|
|
221
|
+
// Login succeeded but init failed - still return login success
|
|
222
|
+
const errorMsg = initError instanceof Error ? initError.message : String(initError);
|
|
223
|
+
return {
|
|
224
|
+
content: [{ type: 'text', text: result + `\n\n⚠️ Auto-initialization failed: ${errorMsg}. Use acuity_init to retry.` }]
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return {
|
|
229
|
+
content: [{ type: 'text', text: result }]
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
case 'acuity_logout': {
|
|
233
|
+
const result = await logout();
|
|
234
|
+
return {
|
|
235
|
+
content: [{ type: 'text', text: result }]
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
case 'acuity_auth_status': {
|
|
239
|
+
const result = await getAuthStatus();
|
|
240
|
+
return {
|
|
241
|
+
content: [{ type: 'text', text: result }]
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
// Data tools require authentication
|
|
246
|
+
const { token, email } = await getAccessToken();
|
|
247
|
+
const hasuraClient = HasuraClient.forUser(email, token);
|
|
248
|
+
// Helper: auto-initialize if needed and return init context for response
|
|
249
|
+
async function ensureInitialized() {
|
|
250
|
+
if (!sessionInitData) {
|
|
251
|
+
sessionInitData = await acuityInit(hasuraClient);
|
|
252
|
+
}
|
|
253
|
+
return sessionInitData;
|
|
254
|
+
}
|
|
255
|
+
switch (name) {
|
|
256
|
+
case 'acuity_init': {
|
|
257
|
+
// Always refresh on explicit call
|
|
258
|
+
sessionInitData = await acuityInit(hasuraClient);
|
|
259
|
+
// Return concise summary - enums are documented in tool descriptions
|
|
260
|
+
const d = sessionInitData;
|
|
261
|
+
const summary = `✅ Acuity initialized
|
|
262
|
+
|
|
263
|
+
Company: ${d.company}
|
|
264
|
+
Currency: ${d.currency_code} (${d.currency_locale})
|
|
265
|
+
|
|
266
|
+
Data available:
|
|
267
|
+
• Projects: ${d.entities.projects.count} | Proposals: ${d.entities.proposals.count}
|
|
268
|
+
• Risks: ${d.entities.project_risks.count} (project) + ${d.entities.proposal_risks.count} (proposal)
|
|
269
|
+
• Issues: ${d.entities.project_issues.count} (project) + ${d.entities.proposal_issues.count} (proposal)
|
|
270
|
+
• Lessons: ${d.entities.lessons_learned.count}
|
|
271
|
+
• Status Reports: ${d.entities.status_reports.count}
|
|
272
|
+
|
|
273
|
+
Lookups: ${d.lookup_tables.departments} departments, ${d.lookup_tables.categories} categories, ${d.lookup_tables.lifecycles} lifecycles`;
|
|
274
|
+
return {
|
|
275
|
+
content: [{
|
|
276
|
+
type: 'text',
|
|
277
|
+
text: summary
|
|
278
|
+
}]
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
case 'list_projects': {
|
|
282
|
+
// Auto-initialize if needed
|
|
283
|
+
const initData = await ensureInitialized();
|
|
284
|
+
const listResult = await listProjects(request.params.arguments, hasuraClient);
|
|
285
|
+
// If this was auto-initialized, include context in response
|
|
286
|
+
const response = sessionInitData === initData && !request.params.arguments
|
|
287
|
+
? { _context: initData, ...listResult }
|
|
288
|
+
: listResult;
|
|
289
|
+
return {
|
|
290
|
+
content: [{
|
|
291
|
+
type: 'text',
|
|
292
|
+
text: JSON.stringify(response, null, 2)
|
|
293
|
+
}]
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
case 'get_project': {
|
|
297
|
+
// Auto-initialize if needed
|
|
298
|
+
await ensureInitialized();
|
|
299
|
+
const projectResult = await getProject(request.params.arguments, hasuraClient);
|
|
300
|
+
return {
|
|
301
|
+
content: [{
|
|
302
|
+
type: 'text',
|
|
303
|
+
text: JSON.stringify(projectResult, null, 2)
|
|
304
|
+
}]
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
case 'get_status_reports': {
|
|
308
|
+
// Auto-initialize if needed
|
|
309
|
+
await ensureInitialized();
|
|
310
|
+
const statusReportsText = await getStatusReports(request.params.arguments, hasuraClient);
|
|
311
|
+
return {
|
|
312
|
+
content: [{
|
|
313
|
+
type: 'text',
|
|
314
|
+
text: statusReportsText
|
|
315
|
+
}]
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
case 'list_risks': {
|
|
319
|
+
// Auto-initialize if needed
|
|
320
|
+
await ensureInitialized();
|
|
321
|
+
const risksResult = await listRisks(request.params.arguments, hasuraClient);
|
|
322
|
+
return {
|
|
323
|
+
content: [{
|
|
324
|
+
type: 'text',
|
|
325
|
+
text: JSON.stringify(risksResult, null, 2)
|
|
326
|
+
}]
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
case 'get_risk': {
|
|
330
|
+
// Auto-initialize if needed
|
|
331
|
+
await ensureInitialized();
|
|
332
|
+
const riskResult = await getRisk(request.params.arguments, hasuraClient);
|
|
333
|
+
return {
|
|
334
|
+
content: [{
|
|
335
|
+
type: 'text',
|
|
336
|
+
text: JSON.stringify(riskResult, null, 2)
|
|
337
|
+
}]
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
case 'list_issues': {
|
|
341
|
+
// Auto-initialize if needed
|
|
342
|
+
await ensureInitialized();
|
|
343
|
+
const issuesResult = await listIssues(request.params.arguments, hasuraClient);
|
|
344
|
+
return {
|
|
345
|
+
content: [{
|
|
346
|
+
type: 'text',
|
|
347
|
+
text: JSON.stringify(issuesResult, null, 2)
|
|
348
|
+
}]
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
case 'get_issue': {
|
|
352
|
+
// Auto-initialize if needed
|
|
353
|
+
await ensureInitialized();
|
|
354
|
+
const issueResult = await getIssue(request.params.arguments, hasuraClient);
|
|
355
|
+
return {
|
|
356
|
+
content: [{
|
|
357
|
+
type: 'text',
|
|
358
|
+
text: JSON.stringify(issueResult, null, 2)
|
|
359
|
+
}]
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
case 'list_lessons_learned': {
|
|
363
|
+
// Auto-initialize if needed
|
|
364
|
+
await ensureInitialized();
|
|
365
|
+
const lessonsResult = await listLessonsLearned(request.params.arguments, hasuraClient);
|
|
366
|
+
return {
|
|
367
|
+
content: [{
|
|
368
|
+
type: 'text',
|
|
369
|
+
text: JSON.stringify(lessonsResult, null, 2)
|
|
370
|
+
}]
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
case 'get_lesson_learned': {
|
|
374
|
+
// Auto-initialize if needed
|
|
375
|
+
await ensureInitialized();
|
|
376
|
+
const lessonResult = await getLessonLearned(request.params.arguments, hasuraClient);
|
|
377
|
+
return {
|
|
378
|
+
content: [{
|
|
379
|
+
type: 'text',
|
|
380
|
+
text: JSON.stringify(lessonResult, null, 2)
|
|
381
|
+
}]
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
case 'get_lookup_values': {
|
|
385
|
+
// Auto-initialize if needed
|
|
386
|
+
await ensureInitialized();
|
|
387
|
+
const lookupResult = await getLookupValues(request.params.arguments, hasuraClient);
|
|
388
|
+
return {
|
|
389
|
+
content: [{
|
|
390
|
+
type: 'text',
|
|
391
|
+
text: JSON.stringify(lookupResult, null, 2)
|
|
392
|
+
}]
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
case 'search_projects': {
|
|
396
|
+
// Auto-initialize if needed
|
|
397
|
+
await ensureInitialized();
|
|
398
|
+
const searchResult = await searchProjects(request.params.arguments, hasuraClient);
|
|
399
|
+
return {
|
|
400
|
+
content: [{
|
|
401
|
+
type: 'text',
|
|
402
|
+
text: JSON.stringify(searchResult, null, 2)
|
|
403
|
+
}]
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
case 'get_dashboard_summary': {
|
|
407
|
+
// Auto-initialize if needed
|
|
408
|
+
await ensureInitialized();
|
|
409
|
+
const dashboardResult = await getDashboardSummary(request.params.arguments, hasuraClient);
|
|
410
|
+
return {
|
|
411
|
+
content: [{
|
|
412
|
+
type: 'text',
|
|
413
|
+
text: JSON.stringify(dashboardResult, null, 2)
|
|
414
|
+
}]
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
default:
|
|
418
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
catch (error) {
|
|
422
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
423
|
+
return {
|
|
424
|
+
content: [{
|
|
425
|
+
type: 'text',
|
|
426
|
+
text: `Error: ${errorMessage}`
|
|
427
|
+
}],
|
|
428
|
+
isError: true
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
});
|
|
432
|
+
/**
|
|
433
|
+
* Start the MCP server
|
|
434
|
+
*/
|
|
435
|
+
async function runServer() {
|
|
436
|
+
// Only log in debug mode to avoid interfering with MCP protocol
|
|
437
|
+
const debug = process.env.LOG_LEVEL === 'debug';
|
|
438
|
+
// Get environment configuration (will throw if ACUITY_ENV not set)
|
|
439
|
+
const env = getEnvironment();
|
|
440
|
+
if (debug) {
|
|
441
|
+
console.error('[MCP] Starting Acuity MCP Server...');
|
|
442
|
+
console.error('[MCP] Configuration:');
|
|
443
|
+
console.error(`[MCP] Environment: ${env.id} (${env.name})`);
|
|
444
|
+
console.error(`[MCP] Hasura endpoint: ${env.hasuraEndpoint}`);
|
|
445
|
+
console.error(`[MCP] Auth0 domain: ${env.auth0Domain}`);
|
|
446
|
+
}
|
|
447
|
+
// Create stdio transport
|
|
448
|
+
const transport = new StdioServerTransport();
|
|
449
|
+
// Connect server to transport
|
|
450
|
+
await server.connect(transport);
|
|
451
|
+
if (debug) {
|
|
452
|
+
console.error('[MCP] Server running on stdio');
|
|
453
|
+
console.error('[MCP] Available tools: list_projects, get_status_reports');
|
|
454
|
+
console.error('[MCP] Ready to receive requests...');
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* Parse command line arguments
|
|
459
|
+
*/
|
|
460
|
+
function parseArgs(args) {
|
|
461
|
+
let command = null;
|
|
462
|
+
let port = 3000; // default port
|
|
463
|
+
for (let i = 0; i < args.length; i++) {
|
|
464
|
+
const arg = args[i];
|
|
465
|
+
if (arg === '--port' || arg === '-p') {
|
|
466
|
+
const portArg = args[i + 1];
|
|
467
|
+
if (portArg) {
|
|
468
|
+
port = parseInt(portArg, 10);
|
|
469
|
+
i++; // skip next arg
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
else if (arg.startsWith('--port=')) {
|
|
473
|
+
port = parseInt(arg.split('=')[1], 10);
|
|
474
|
+
}
|
|
475
|
+
else if (!arg.startsWith('-')) {
|
|
476
|
+
command = arg;
|
|
477
|
+
}
|
|
478
|
+
else if (arg === '--http' || arg === '-H') {
|
|
479
|
+
command = 'http';
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
return { command, port };
|
|
483
|
+
}
|
|
484
|
+
/**
|
|
485
|
+
* Main entry point
|
|
486
|
+
*/
|
|
487
|
+
async function main() {
|
|
488
|
+
const args = process.argv.slice(2);
|
|
489
|
+
const { command, port } = parseArgs(args);
|
|
490
|
+
switch (command) {
|
|
491
|
+
case 'init':
|
|
492
|
+
await handleInit();
|
|
493
|
+
break;
|
|
494
|
+
case 'logout':
|
|
495
|
+
await handleLogout();
|
|
496
|
+
break;
|
|
497
|
+
case 'status':
|
|
498
|
+
await handleStatus();
|
|
499
|
+
break;
|
|
500
|
+
case 'http':
|
|
501
|
+
// Start HTTP server for remote clients (Copilot, remote Claude, etc.)
|
|
502
|
+
await startHttpServer(port);
|
|
503
|
+
break;
|
|
504
|
+
case 'help': {
|
|
505
|
+
const envList = listEnvironments()
|
|
506
|
+
.map(e => ` ${e.id.padEnd(12)} ${e.name}${e.auth0ClientId === 'TODO' ? ' (not configured)' : ''}`)
|
|
507
|
+
.join('\n');
|
|
508
|
+
console.log(`
|
|
509
|
+
Acuity MCP Server - AI-powered access to project management data
|
|
510
|
+
|
|
511
|
+
Usage:
|
|
512
|
+
ACUITY_ENV=<env> npx acuity-mcp-server [command] [options]
|
|
513
|
+
|
|
514
|
+
IMPORTANT: ACUITY_ENV is required. Set it to specify which Acuity instance to connect to.
|
|
515
|
+
|
|
516
|
+
Available Environments:
|
|
517
|
+
${envList}
|
|
518
|
+
|
|
519
|
+
Commands:
|
|
520
|
+
(none) Start MCP server on stdio (for Claude Desktop, Cursor)
|
|
521
|
+
http Start HTTP server for remote clients (Copilot Studio, remote Claude)
|
|
522
|
+
init Authenticate via browser (Device Authorization Flow)
|
|
523
|
+
logout Clear stored credentials
|
|
524
|
+
status Show current authentication status
|
|
525
|
+
help Show this help message
|
|
526
|
+
|
|
527
|
+
Options:
|
|
528
|
+
--port, -p <port> Port for HTTP server (default: 3000)
|
|
529
|
+
--http, -H Start in HTTP mode (same as 'http' command)
|
|
530
|
+
|
|
531
|
+
Examples:
|
|
532
|
+
# Authenticate with US Production
|
|
533
|
+
ACUITY_ENV=US-1 npx acuity-mcp-server init
|
|
534
|
+
|
|
535
|
+
# Start stdio server for Claude Desktop
|
|
536
|
+
ACUITY_ENV=US-1 npx acuity-mcp-server
|
|
537
|
+
|
|
538
|
+
# Start HTTP server on custom port
|
|
539
|
+
ACUITY_ENV=US-1 npx acuity-mcp-server http --port 8080
|
|
540
|
+
|
|
541
|
+
Claude Desktop Configuration:
|
|
542
|
+
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
|
|
543
|
+
|
|
544
|
+
{
|
|
545
|
+
"mcpServers": {
|
|
546
|
+
"acuity": {
|
|
547
|
+
"command": "npx",
|
|
548
|
+
"args": ["acuity-mcp-server"],
|
|
549
|
+
"env": {
|
|
550
|
+
"ACUITY_ENV": "US-1"
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
Authentication:
|
|
557
|
+
1. Set ACUITY_ENV to your environment (e.g., US-1)
|
|
558
|
+
2. Run 'init' to authenticate via browser
|
|
559
|
+
3. Credentials are stored securely in system keychain
|
|
560
|
+
4. Each environment stores credentials separately
|
|
561
|
+
|
|
562
|
+
Environment Variables:
|
|
563
|
+
ACUITY_ENV Required: Environment to connect to (US-1, EU-1, etc.)
|
|
564
|
+
LOG_LEVEL Set to 'debug' for verbose logging
|
|
565
|
+
USER_JWT Legacy: JWT token (if keychain not available)
|
|
566
|
+
MCP_API_KEY API key for HTTP mode
|
|
567
|
+
MCP_SERVICE_EMAIL Service account email for API key auth
|
|
568
|
+
`);
|
|
569
|
+
break;
|
|
570
|
+
}
|
|
571
|
+
default:
|
|
572
|
+
// No command or unknown command - run as MCP server (stdio)
|
|
573
|
+
await runServer();
|
|
574
|
+
break;
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
// Handle graceful shutdown
|
|
578
|
+
process.on('SIGINT', async () => {
|
|
579
|
+
console.error('[MCP] Shutting down gracefully...');
|
|
580
|
+
await server.close();
|
|
581
|
+
process.exit(0);
|
|
582
|
+
});
|
|
583
|
+
process.on('SIGTERM', async () => {
|
|
584
|
+
console.error('[MCP] Shutting down gracefully...');
|
|
585
|
+
await server.close();
|
|
586
|
+
process.exit(0);
|
|
587
|
+
});
|
|
588
|
+
// Start the application
|
|
589
|
+
main().catch((error) => {
|
|
590
|
+
console.error('[MCP] Fatal error:', error);
|
|
591
|
+
process.exit(1);
|
|
592
|
+
});
|
|
593
|
+
//# sourceMappingURL=main.js.map
|