@enfyra/mcp-server 0.1.13 → 0.1.14

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.
Files changed (68) hide show
  1. package/README.md +14 -1
  2. package/dist/index.d.ts +5 -0
  3. package/{src/index.mjs → dist/index.js} +8 -10
  4. package/dist/index.js.map +1 -0
  5. package/dist/lib/auth.d.ts +34 -0
  6. package/dist/lib/auth.js +161 -0
  7. package/dist/lib/auth.js.map +1 -0
  8. package/dist/lib/config-local.d.ts +1 -0
  9. package/dist/lib/config-local.js +719 -0
  10. package/dist/lib/config-local.js.map +1 -0
  11. package/dist/lib/fetch.d.ts +28 -0
  12. package/dist/lib/fetch.js +106 -0
  13. package/dist/lib/fetch.js.map +1 -0
  14. package/dist/lib/mcp-examples.d.ts +99 -0
  15. package/dist/lib/mcp-examples.js +2285 -0
  16. package/dist/lib/mcp-examples.js.map +1 -0
  17. package/dist/lib/mcp-instructions.d.ts +11 -0
  18. package/dist/lib/mcp-instructions.js +78 -0
  19. package/dist/lib/mcp-instructions.js.map +1 -0
  20. package/dist/lib/mutation-guards.d.ts +33 -0
  21. package/dist/lib/mutation-guards.js +106 -0
  22. package/dist/lib/mutation-guards.js.map +1 -0
  23. package/dist/lib/platform-operation-tools.d.ts +12 -0
  24. package/dist/lib/platform-operation-tools.js +2304 -0
  25. package/dist/lib/platform-operation-tools.js.map +1 -0
  26. package/dist/lib/required-knowledge.d.ts +32 -0
  27. package/dist/lib/required-knowledge.js +181 -0
  28. package/dist/lib/required-knowledge.js.map +1 -0
  29. package/dist/lib/response-format.d.ts +7 -0
  30. package/dist/lib/response-format.js +179 -0
  31. package/dist/lib/response-format.js.map +1 -0
  32. package/dist/lib/route-guards.d.ts +1 -0
  33. package/dist/lib/route-guards.js +19 -0
  34. package/dist/lib/route-guards.js.map +1 -0
  35. package/dist/lib/route-permission-tools.d.ts +91 -0
  36. package/dist/lib/route-permission-tools.js +151 -0
  37. package/dist/lib/route-permission-tools.js.map +1 -0
  38. package/dist/lib/source-artifacts.d.ts +27 -0
  39. package/dist/lib/source-artifacts.js +82 -0
  40. package/dist/lib/source-artifacts.js.map +1 -0
  41. package/dist/lib/table-tools.d.ts +62 -0
  42. package/dist/lib/table-tools.js +774 -0
  43. package/dist/lib/table-tools.js.map +1 -0
  44. package/dist/lib/tool-routing.d.ts +297 -0
  45. package/dist/lib/tool-routing.js +585 -0
  46. package/dist/lib/tool-routing.js.map +1 -0
  47. package/dist/lib/types.d.ts +17 -0
  48. package/dist/lib/types.js +2 -0
  49. package/dist/lib/types.js.map +1 -0
  50. package/dist/mcp-server-entry.d.ts +4 -0
  51. package/dist/mcp-server-entry.js +2785 -0
  52. package/dist/mcp-server-entry.js.map +1 -0
  53. package/package.json +16 -9
  54. package/src/lib/auth.js +0 -179
  55. package/src/lib/config-local.mjs +0 -718
  56. package/src/lib/fetch.js +0 -111
  57. package/src/lib/mcp-examples.js +0 -2289
  58. package/src/lib/mcp-instructions.js +0 -80
  59. package/src/lib/mutation-guards.js +0 -118
  60. package/src/lib/platform-operation-tools.js +0 -2616
  61. package/src/lib/required-knowledge.js +0 -188
  62. package/src/lib/response-format.js +0 -187
  63. package/src/lib/route-guards.js +0 -24
  64. package/src/lib/route-permission-tools.js +0 -160
  65. package/src/lib/source-artifacts.js +0 -82
  66. package/src/lib/table-tools.js +0 -907
  67. package/src/lib/tool-routing.js +0 -589
  68. package/src/mcp-server-entry.mjs +0 -3177
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Manage Enfyra instances from MCP-compatible coding tools such as **Codex**, **Claude Code**, **Cursor**, **VS Code / GitHub Copilot**, **Google Antigravity**, MCP Inspector, and other STDIO MCP hosts.
4
4
 
5
- This package is the MCP bridge only. Assistant rules, schema behavior, dynamic script guidance, and examples are served through the MCP server itself from `src/lib/mcp-instructions.js`, `src/lib/mcp-examples.js`, and tool descriptions in `src/mcp-server-entry.mjs`.
5
+ This package is the MCP bridge only. Assistant rules, schema behavior, dynamic script guidance, and examples are served through the MCP server itself from TypeScript source in `src/lib/mcp-instructions.ts`, `src/lib/mcp-examples.ts`, and tool descriptions in `src/mcp-server-entry.ts`. Published packages run the compiled `dist/index.js` entry.
6
6
 
7
7
  ## Quick Start
8
8
 
@@ -34,9 +34,22 @@ npx @enfyra/mcp-server@latest config --antigravity
34
34
  Equivalent in this repo:
35
35
 
36
36
  ```bash
37
+ yarn build
37
38
  yarn mcp:config
38
39
  ```
39
40
 
41
+ ## Development
42
+
43
+ This repo uses Yarn 4 through Corepack and TypeScript source compiled to `dist`.
44
+
45
+ ```bash
46
+ yarn typecheck
47
+ yarn build
48
+ yarn test
49
+ ```
50
+
51
+ `yarn test` builds first and then runs Node tests against `dist` while static source assertions read `src/**/*.ts`.
52
+
40
53
  ## Choose A Client
41
54
 
42
55
  | Client | Command | Project config |
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Enfyra MCP — entry: `config` subcommand (local project files) or stdio MCP server.
4
+ */
5
+ export {};
@@ -2,12 +2,10 @@
2
2
  /**
3
3
  * Enfyra MCP — entry: `config` subcommand (local project files) or stdio MCP server.
4
4
  */
5
-
6
5
  import { config as loadEnv } from 'dotenv';
7
-
8
6
  const args = process.argv.slice(2);
9
7
  if (args[0] === '--help' || args[0] === '-h' || args[0] === 'help') {
10
- console.log(`Enfyra MCP Server
8
+ console.log(`Enfyra MCP Server
11
9
 
12
10
  Usage:
13
11
  npx @enfyra/mcp-server@latest Start the MCP stdio server
@@ -27,14 +25,14 @@ Common config flags:
27
25
 
28
26
  Run \`npx @enfyra/mcp-server@latest config --help\` for full config details.
29
27
  `);
30
- process.exit(0);
28
+ process.exit(0);
31
29
  }
32
30
  if (args[0] === 'config') {
33
- loadEnv({ quiet: true });
34
- const { runLocalConfig } = await import('./lib/config-local.mjs');
35
- await runLocalConfig(args.slice(1));
36
- process.exit(0);
31
+ loadEnv({ quiet: true });
32
+ const { runLocalConfig } = await import('./lib/config-local.js');
33
+ await runLocalConfig(args.slice(1));
34
+ process.exit(0);
37
35
  }
38
-
39
36
  loadEnv();
40
- await import('./mcp-server-entry.mjs');
37
+ await import('./mcp-server-entry.js');
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,QAAQ,CAAC;AAE3C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;CAmBb,CAAC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACzB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IACjE,MAAM,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,OAAO,EAAE,CAAC;AACV,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Authentication module for Enfyra MCP Server
3
+ * Handles API-token exchange and token validation
4
+ */
5
+ /**
6
+ * Initialize auth module with config
7
+ */
8
+ export declare function initAuth(apiUrl: any, apiToken?: string): void;
9
+ /**
10
+ * Check if token needs refresh (expires within the refresh buffer)
11
+ */
12
+ export declare function needsRefresh(): boolean;
13
+ /**
14
+ * Get current access token (does not refresh)
15
+ */
16
+ export declare function getAccessToken(): any;
17
+ export declare function hasApiToken(): boolean;
18
+ /**
19
+ * Get token expiry time
20
+ */
21
+ export declare function getTokenExpiry(): any;
22
+ export declare function exchangeApiToken(url: any, apiToken: any): Promise<any>;
23
+ /**
24
+ * Refresh access token using refresh token
25
+ */
26
+ export declare function refreshAccessToken(url: any): Promise<any>;
27
+ /**
28
+ * Get valid access token, refreshing if needed
29
+ */
30
+ export declare function getValidToken(url: any): Promise<any>;
31
+ /**
32
+ * Reset token state (for logout)
33
+ */
34
+ export declare function resetTokens(): void;
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Authentication module for Enfyra MCP Server
3
+ * Handles API-token exchange and token validation
4
+ */
5
+ // Token state
6
+ let accessToken = null;
7
+ let refreshToken = null;
8
+ let tokenExpiry = null; // expTime từ server (milliseconds)
9
+ let isRefreshing = false;
10
+ let exchangePromise = null;
11
+ // Config
12
+ let API_URL = 'http://localhost:3000/api';
13
+ let API_TOKEN = '';
14
+ const TOKEN_REFRESH_BUFFER = 20000;
15
+ function normalizeExpiry(expTime) {
16
+ if (expTime == null)
17
+ return Infinity;
18
+ if (typeof expTime === 'number')
19
+ return expTime < 1_000_000_000_000 ? expTime * 1000 : expTime;
20
+ if (typeof expTime === 'string' && expTime.trim()) {
21
+ const numeric = Number(expTime);
22
+ if (Number.isFinite(numeric))
23
+ return numeric < 1_000_000_000_000 ? numeric * 1000 : numeric;
24
+ const parsed = Date.parse(expTime);
25
+ if (Number.isFinite(parsed))
26
+ return parsed;
27
+ }
28
+ return Infinity;
29
+ }
30
+ /**
31
+ * Initialize auth module with config
32
+ */
33
+ export function initAuth(apiUrl, apiToken = '') {
34
+ API_URL = apiUrl;
35
+ API_TOKEN = apiToken;
36
+ }
37
+ /**
38
+ * Check if token needs refresh (expires within the refresh buffer)
39
+ */
40
+ export function needsRefresh() {
41
+ if (tokenExpiry === Infinity)
42
+ return false;
43
+ if (!tokenExpiry)
44
+ return true;
45
+ const now = Date.now();
46
+ return now + TOKEN_REFRESH_BUFFER >= tokenExpiry;
47
+ }
48
+ /**
49
+ * Get current access token (does not refresh)
50
+ */
51
+ export function getAccessToken() {
52
+ return accessToken;
53
+ }
54
+ export function hasApiToken() {
55
+ return !!API_TOKEN;
56
+ }
57
+ /**
58
+ * Get token expiry time
59
+ */
60
+ export function getTokenExpiry() {
61
+ return tokenExpiry;
62
+ }
63
+ export async function exchangeApiToken(url, apiToken) {
64
+ const apiUrl = url || API_URL;
65
+ const token = apiToken || API_TOKEN;
66
+ if (!token) {
67
+ throw new Error('API token required');
68
+ }
69
+ if (exchangePromise)
70
+ return exchangePromise;
71
+ exchangePromise = (async () => {
72
+ console.error('[Auth] Exchanging API token...');
73
+ const response = await fetch(`${apiUrl}/auth/token/exchange`, {
74
+ method: 'POST',
75
+ headers: { 'Content-Type': 'application/json' },
76
+ body: JSON.stringify({ apiToken: token }),
77
+ });
78
+ if (!response.ok) {
79
+ throw new Error(`API token exchange failed: ${await response.text()}`);
80
+ }
81
+ const data = await response.json();
82
+ accessToken = data.accessToken || data.access_token;
83
+ refreshToken = null;
84
+ tokenExpiry = normalizeExpiry(data.expTime ?? data.exp_time ?? data.expiresAt ?? data.expires_at);
85
+ const expiryLabel = tokenExpiry === Infinity
86
+ ? 'no expiration'
87
+ : new Date(tokenExpiry).toISOString();
88
+ console.error(`[Auth] API token exchanged, access token expires at ${expiryLabel}`);
89
+ return accessToken;
90
+ })();
91
+ try {
92
+ return await exchangePromise;
93
+ }
94
+ finally {
95
+ exchangePromise = null;
96
+ }
97
+ }
98
+ /**
99
+ * Refresh access token using refresh token
100
+ */
101
+ export async function refreshAccessToken(url) {
102
+ const apiUrl = url || API_URL;
103
+ if (isRefreshing) {
104
+ await new Promise(resolve => setTimeout(resolve, 500));
105
+ return accessToken;
106
+ }
107
+ if (API_TOKEN) {
108
+ return await exchangeApiToken(apiUrl, API_TOKEN);
109
+ }
110
+ if (!refreshToken) {
111
+ throw new Error('ENFYRA_API_TOKEN required');
112
+ }
113
+ isRefreshing = true;
114
+ try {
115
+ console.error('[Auth] Refreshing token...');
116
+ const response = await fetch(`${apiUrl}/auth/refresh-token`, {
117
+ method: 'POST',
118
+ headers: { 'Content-Type': 'application/json' },
119
+ body: JSON.stringify({ refreshToken }),
120
+ });
121
+ if (!response.ok) {
122
+ refreshToken = null;
123
+ return await exchangeApiToken(apiUrl, API_TOKEN);
124
+ }
125
+ const data = await response.json();
126
+ accessToken = data.accessToken || data.access_token;
127
+ refreshToken = data.refreshToken || data.refresh_token;
128
+ tokenExpiry = normalizeExpiry(data.expTime ?? data.exp_time ?? data.expiresAt ?? data.expires_at);
129
+ console.error(`[Auth] Token refreshed, expires at ${new Date(tokenExpiry).toISOString()}`);
130
+ return accessToken;
131
+ }
132
+ finally {
133
+ isRefreshing = false;
134
+ }
135
+ }
136
+ /**
137
+ * Get valid access token, refreshing if needed
138
+ */
139
+ export async function getValidToken(url) {
140
+ const apiUrl = url || API_URL;
141
+ if (!accessToken || needsRefresh()) {
142
+ if (API_TOKEN) {
143
+ return await exchangeApiToken(apiUrl, API_TOKEN);
144
+ }
145
+ if (refreshToken) {
146
+ return await refreshAccessToken(apiUrl);
147
+ }
148
+ throw new Error('ENFYRA_API_TOKEN required');
149
+ }
150
+ return accessToken;
151
+ }
152
+ /**
153
+ * Reset token state (for logout)
154
+ */
155
+ export function resetTokens() {
156
+ accessToken = null;
157
+ refreshToken = null;
158
+ tokenExpiry = null;
159
+ isRefreshing = false;
160
+ }
161
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function runLocalConfig(argv: string[]): Promise<void>;