@defai.digital/mcp-server 13.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.
Files changed (178) hide show
  1. package/LICENSE +214 -0
  2. package/dist/bin.d.ts +3 -0
  3. package/dist/bin.d.ts.map +1 -0
  4. package/dist/bin.js +7 -0
  5. package/dist/bin.js.map +1 -0
  6. package/dist/bootstrap.d.ts +89 -0
  7. package/dist/bootstrap.d.ts.map +1 -0
  8. package/dist/bootstrap.js +161 -0
  9. package/dist/bootstrap.js.map +1 -0
  10. package/dist/index.d.ts +10 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +17 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/middleware/rate-limiter.d.ts +136 -0
  15. package/dist/middleware/rate-limiter.d.ts.map +1 -0
  16. package/dist/middleware/rate-limiter.js +262 -0
  17. package/dist/middleware/rate-limiter.js.map +1 -0
  18. package/dist/prompts/agent-guide.d.ts +16 -0
  19. package/dist/prompts/agent-guide.d.ts.map +1 -0
  20. package/dist/prompts/agent-guide.js +391 -0
  21. package/dist/prompts/agent-guide.js.map +1 -0
  22. package/dist/prompts/explain-workflow.d.ts +15 -0
  23. package/dist/prompts/explain-workflow.d.ts.map +1 -0
  24. package/dist/prompts/explain-workflow.js +157 -0
  25. package/dist/prompts/explain-workflow.js.map +1 -0
  26. package/dist/prompts/index.d.ts +39 -0
  27. package/dist/prompts/index.d.ts.map +1 -0
  28. package/dist/prompts/index.js +83 -0
  29. package/dist/prompts/index.js.map +1 -0
  30. package/dist/prompts/review-changes.d.ts +15 -0
  31. package/dist/prompts/review-changes.d.ts.map +1 -0
  32. package/dist/prompts/review-changes.js +102 -0
  33. package/dist/prompts/review-changes.js.map +1 -0
  34. package/dist/prompts/troubleshoot-session.d.ts +15 -0
  35. package/dist/prompts/troubleshoot-session.d.ts.map +1 -0
  36. package/dist/prompts/troubleshoot-session.js +156 -0
  37. package/dist/prompts/troubleshoot-session.js.map +1 -0
  38. package/dist/registry-accessor.d.ts +83 -0
  39. package/dist/registry-accessor.d.ts.map +1 -0
  40. package/dist/registry-accessor.js +153 -0
  41. package/dist/registry-accessor.js.map +1 -0
  42. package/dist/resources/agents.d.ts +40 -0
  43. package/dist/resources/agents.d.ts.map +1 -0
  44. package/dist/resources/agents.js +123 -0
  45. package/dist/resources/agents.js.map +1 -0
  46. package/dist/resources/config.d.ts +57 -0
  47. package/dist/resources/config.d.ts.map +1 -0
  48. package/dist/resources/config.js +222 -0
  49. package/dist/resources/config.js.map +1 -0
  50. package/dist/resources/index.d.ts +38 -0
  51. package/dist/resources/index.d.ts.map +1 -0
  52. package/dist/resources/index.js +132 -0
  53. package/dist/resources/index.js.map +1 -0
  54. package/dist/resources/policies.d.ts +40 -0
  55. package/dist/resources/policies.d.ts.map +1 -0
  56. package/dist/resources/policies.js +122 -0
  57. package/dist/resources/policies.js.map +1 -0
  58. package/dist/resources/sessions.d.ts +30 -0
  59. package/dist/resources/sessions.d.ts.map +1 -0
  60. package/dist/resources/sessions.js +64 -0
  61. package/dist/resources/sessions.js.map +1 -0
  62. package/dist/resources/workflows.d.ts +40 -0
  63. package/dist/resources/workflows.d.ts.map +1 -0
  64. package/dist/resources/workflows.js +143 -0
  65. package/dist/resources/workflows.js.map +1 -0
  66. package/dist/schema-registry.d.ts +23 -0
  67. package/dist/schema-registry.d.ts.map +1 -0
  68. package/dist/schema-registry.js +225 -0
  69. package/dist/schema-registry.js.map +1 -0
  70. package/dist/server.d.ts +63 -0
  71. package/dist/server.d.ts.map +1 -0
  72. package/dist/server.js +393 -0
  73. package/dist/server.js.map +1 -0
  74. package/dist/session-accessor.d.ts +23 -0
  75. package/dist/session-accessor.d.ts.map +1 -0
  76. package/dist/session-accessor.js +39 -0
  77. package/dist/session-accessor.js.map +1 -0
  78. package/dist/shared-registry.d.ts +23 -0
  79. package/dist/shared-registry.d.ts.map +1 -0
  80. package/dist/shared-registry.js +235 -0
  81. package/dist/shared-registry.js.map +1 -0
  82. package/dist/stdio.d.ts +6 -0
  83. package/dist/stdio.d.ts.map +1 -0
  84. package/dist/stdio.js +152 -0
  85. package/dist/stdio.js.map +1 -0
  86. package/dist/tool-namespacing.d.ts +28 -0
  87. package/dist/tool-namespacing.d.ts.map +1 -0
  88. package/dist/tool-namespacing.js +80 -0
  89. package/dist/tool-namespacing.js.map +1 -0
  90. package/dist/tools/ability.d.ts +55 -0
  91. package/dist/tools/ability.d.ts.map +1 -0
  92. package/dist/tools/ability.js +560 -0
  93. package/dist/tools/ability.js.map +1 -0
  94. package/dist/tools/agent.d.ts +73 -0
  95. package/dist/tools/agent.d.ts.map +1 -0
  96. package/dist/tools/agent.js +895 -0
  97. package/dist/tools/agent.js.map +1 -0
  98. package/dist/tools/config.d.ts +36 -0
  99. package/dist/tools/config.d.ts.map +1 -0
  100. package/dist/tools/config.js +265 -0
  101. package/dist/tools/config.js.map +1 -0
  102. package/dist/tools/design.d.ts +42 -0
  103. package/dist/tools/design.d.ts.map +1 -0
  104. package/dist/tools/design.js +736 -0
  105. package/dist/tools/design.js.map +1 -0
  106. package/dist/tools/discuss.d.ts +40 -0
  107. package/dist/tools/discuss.d.ts.map +1 -0
  108. package/dist/tools/discuss.js +331 -0
  109. package/dist/tools/discuss.js.map +1 -0
  110. package/dist/tools/file-system.d.ts +63 -0
  111. package/dist/tools/file-system.d.ts.map +1 -0
  112. package/dist/tools/file-system.js +513 -0
  113. package/dist/tools/file-system.js.map +1 -0
  114. package/dist/tools/guard.d.ts +29 -0
  115. package/dist/tools/guard.d.ts.map +1 -0
  116. package/dist/tools/guard.js +311 -0
  117. package/dist/tools/guard.js.map +1 -0
  118. package/dist/tools/index.d.ts +35 -0
  119. package/dist/tools/index.d.ts.map +1 -0
  120. package/dist/tools/index.js +178 -0
  121. package/dist/tools/index.js.map +1 -0
  122. package/dist/tools/memory.d.ts +101 -0
  123. package/dist/tools/memory.d.ts.map +1 -0
  124. package/dist/tools/memory.js +704 -0
  125. package/dist/tools/memory.js.map +1 -0
  126. package/dist/tools/orchestration.d.ts +58 -0
  127. package/dist/tools/orchestration.d.ts.map +1 -0
  128. package/dist/tools/orchestration.js +714 -0
  129. package/dist/tools/orchestration.js.map +1 -0
  130. package/dist/tools/review.d.ts +40 -0
  131. package/dist/tools/review.d.ts.map +1 -0
  132. package/dist/tools/review.js +319 -0
  133. package/dist/tools/review.js.map +1 -0
  134. package/dist/tools/scaffold.d.ts +27 -0
  135. package/dist/tools/scaffold.d.ts.map +1 -0
  136. package/dist/tools/scaffold.js +495 -0
  137. package/dist/tools/scaffold.js.map +1 -0
  138. package/dist/tools/session.d.ts +75 -0
  139. package/dist/tools/session.d.ts.map +1 -0
  140. package/dist/tools/session.js +749 -0
  141. package/dist/tools/session.js.map +1 -0
  142. package/dist/tools/telemetry.d.ts +58 -0
  143. package/dist/tools/telemetry.d.ts.map +1 -0
  144. package/dist/tools/telemetry.js +638 -0
  145. package/dist/tools/telemetry.js.map +1 -0
  146. package/dist/tools/trace.d.ts +29 -0
  147. package/dist/tools/trace.d.ts.map +1 -0
  148. package/dist/tools/trace.js +191 -0
  149. package/dist/tools/trace.js.map +1 -0
  150. package/dist/tools/workflow.d.ts +26 -0
  151. package/dist/tools/workflow.d.ts.map +1 -0
  152. package/dist/tools/workflow.js +269 -0
  153. package/dist/tools/workflow.js.map +1 -0
  154. package/dist/trace-wrapper.d.ts +79 -0
  155. package/dist/trace-wrapper.d.ts.map +1 -0
  156. package/dist/trace-wrapper.js +151 -0
  157. package/dist/trace-wrapper.js.map +1 -0
  158. package/dist/types.d.ts +185 -0
  159. package/dist/types.d.ts.map +1 -0
  160. package/dist/types.js +11 -0
  161. package/dist/types.js.map +1 -0
  162. package/dist/utils/artifact-store.d.ts +49 -0
  163. package/dist/utils/artifact-store.d.ts.map +1 -0
  164. package/dist/utils/artifact-store.js +102 -0
  165. package/dist/utils/artifact-store.js.map +1 -0
  166. package/dist/utils/index.d.ts +6 -0
  167. package/dist/utils/index.d.ts.map +1 -0
  168. package/dist/utils/index.js +10 -0
  169. package/dist/utils/index.js.map +1 -0
  170. package/dist/utils/response.d.ts +139 -0
  171. package/dist/utils/response.d.ts.map +1 -0
  172. package/dist/utils/response.js +293 -0
  173. package/dist/utils/response.js.map +1 -0
  174. package/dist/validation.d.ts +223 -0
  175. package/dist/validation.d.ts.map +1 -0
  176. package/dist/validation.js +372 -0
  177. package/dist/validation.js.map +1 -0
  178. package/package.json +67 -0
@@ -0,0 +1,235 @@
1
+ /**
2
+ * Shared Agent Registry
3
+ *
4
+ * Single source of truth for agent registry across all MCP components.
5
+ * Provides unified access to agents with auto-loading of example agents.
6
+ *
7
+ * Now includes ability integration (INV-AGT-ABL-001, INV-AGT-ABL-002, INV-AGT-ABL-003)
8
+ *
9
+ * ARCHITECTURE NOTE: This file imports from tools/index.js to get TOOL_HANDLERS.
10
+ * To avoid circular dependencies, accessor functions are in registry-accessor.ts.
11
+ * Tool files should import from registry-accessor.ts, NOT from this file.
12
+ */
13
+ import * as fs from 'node:fs';
14
+ import * as path from 'node:path';
15
+ import { createPersistentAgentRegistry, createEnhancedAgentExecutor, createProviderPromptExecutor, createAgentLoader, DEFAULT_AGENT_DOMAIN_CONFIG, } from '@defai.digital/agent-domain';
16
+ import { createToolExecutionSuccess, createToolExecutionFailure, ToolExecutorErrorCodes, DATA_DIR_NAME, AGENTS_FILENAME, TIMEOUT_PROVIDER_DEFAULT, LIMIT_ABILITY_TOKENS_AGENT, PROVIDER_DEFAULT, } from '@defai.digital/contracts';
17
+ import { createAbilityRegistry, createAbilityLoader, createAbilityManager, DEFAULT_ABILITY_DOMAIN_CONFIG, } from '@defai.digital/ability-domain';
18
+ // Provider registry from bootstrap (composition root)
19
+ import { createProviderRegistry } from './bootstrap.js';
20
+ import { TOOL_HANDLERS } from './tools/index.js';
21
+ import { setInitializer, setSingletons, resetSharedRegistry as resetAccessor, } from './registry-accessor.js';
22
+ // Re-export accessor functions for backwards compatibility
23
+ // Tools should import directly from registry-accessor.ts
24
+ export { getSharedRegistry, getSharedExecutor, getSharedAbilityRegistry, getSharedAbilityManager, getSharedToolExecutor, isInitialized, registerAgent, getAgent, listAgents, removeAgent, executeAgent, } from './registry-accessor.js';
25
+ // Storage path for persistent agents
26
+ const AGENT_STORAGE_PATH = path.join(process.cwd(), DATA_DIR_NAME, AGENTS_FILENAME);
27
+ // Path to example agents (relative to workspace root)
28
+ const EXAMPLE_AGENTS_DIR = path.join(process.cwd(), 'examples', 'agents');
29
+ // Path to example abilities (relative to workspace root)
30
+ const EXAMPLE_ABILITIES_DIR = path.join(process.cwd(), DEFAULT_ABILITY_DOMAIN_CONFIG.abilitiesDir);
31
+ // Local state for provider registry (not in accessor since it's provider-adapter specific)
32
+ let _providerRegistry = null;
33
+ /**
34
+ * Creates a tool executor bridge that connects to MCP tool handlers
35
+ *
36
+ * INV-TOOL-001: Validates inputs via TOOL_HANDLERS (which use wrapHandlersWithInputValidation)
37
+ * INV-TOOL-002: Freezes outputs via createToolExecutionSuccess/Failure
38
+ * INV-TOOL-003: Returns errors gracefully for unknown tools
39
+ */
40
+ function createToolExecutorBridge(handlers) {
41
+ const handlerMap = new Map(Object.entries(handlers));
42
+ return {
43
+ async execute(toolName, args) {
44
+ const startTime = Date.now();
45
+ const handler = handlerMap.get(toolName);
46
+ if (!handler) {
47
+ // INV-TOOL-003: Unknown tools return error, not throw
48
+ return createToolExecutionFailure(`Tool not found: ${toolName}`, ToolExecutorErrorCodes.TOOL_NOT_FOUND, false, Date.now() - startTime);
49
+ }
50
+ try {
51
+ // Execute the handler (already validated by wrapHandlersWithInputValidation)
52
+ const result = await handler(args);
53
+ // Parse the MCPToolResult
54
+ const output = parseToolResultContent(result);
55
+ if (result.isError) {
56
+ return createToolExecutionFailure(typeof output === 'string' ? output : JSON.stringify(output), ToolExecutorErrorCodes.TOOL_EXECUTION_ERROR, true, // Most tool errors are retryable
57
+ Date.now() - startTime);
58
+ }
59
+ // INV-TOOL-002: createToolExecutionSuccess freezes the result
60
+ return createToolExecutionSuccess(output, Date.now() - startTime);
61
+ }
62
+ catch (error) {
63
+ return createToolExecutionFailure(error instanceof Error ? error.message : 'Unknown tool execution error', ToolExecutorErrorCodes.TOOL_EXECUTION_ERROR, true, Date.now() - startTime);
64
+ }
65
+ },
66
+ isToolAvailable(toolName) {
67
+ return handlerMap.has(toolName);
68
+ },
69
+ getAvailableTools() {
70
+ return [...handlerMap.keys()];
71
+ },
72
+ };
73
+ }
74
+ /**
75
+ * Parse MCPToolResult content into a usable value
76
+ */
77
+ function parseToolResultContent(result) {
78
+ if (!result.content || result.content.length === 0) {
79
+ return undefined;
80
+ }
81
+ // Get the first text content
82
+ const textContent = result.content.find((c) => c.type === 'text');
83
+ if (textContent?.text === undefined) {
84
+ return undefined;
85
+ }
86
+ // Try to parse as JSON
87
+ try {
88
+ return JSON.parse(textContent.text);
89
+ }
90
+ catch {
91
+ // Return as string if not JSON
92
+ return textContent.text;
93
+ }
94
+ }
95
+ /**
96
+ * Initialize shared registry with example agents and abilities
97
+ */
98
+ async function initializeRegistry() {
99
+ // Create provider registry
100
+ _providerRegistry = createProviderRegistry();
101
+ // Create prompt executor
102
+ const promptExecutor = createProviderPromptExecutor(_providerRegistry, {
103
+ defaultProvider: PROVIDER_DEFAULT,
104
+ defaultTimeout: TIMEOUT_PROVIDER_DEFAULT,
105
+ });
106
+ // Create tool executor bridge (INV-TOOL-001, INV-TOOL-002, INV-TOOL-003)
107
+ const toolExecutor = createToolExecutorBridge(TOOL_HANDLERS);
108
+ // Create ability registry and manager (INV-AGT-ABL-001)
109
+ const abilityRegistry = createAbilityRegistry();
110
+ const abilityManager = createAbilityManager(abilityRegistry);
111
+ // Load example abilities
112
+ await loadExampleAbilities(abilityRegistry);
113
+ // Create persistent agent registry
114
+ const registry = createPersistentAgentRegistry({
115
+ storagePath: AGENT_STORAGE_PATH,
116
+ createDir: true,
117
+ loadOnInit: true,
118
+ });
119
+ // Create enhanced executor with full features including ability and tool injection
120
+ const config = {
121
+ ...DEFAULT_AGENT_DOMAIN_CONFIG,
122
+ promptExecutor,
123
+ // INV-TOOL-001, INV-TOOL-002, INV-TOOL-003: Tool executor for MCP tool calls
124
+ toolExecutor,
125
+ // INV-AGT-ABL-001: Ability manager for prompt injection
126
+ abilityManager,
127
+ enableAbilityInjection: true,
128
+ maxAbilityTokens: LIMIT_ABILITY_TOKENS_AGENT,
129
+ checkpointConfig: {
130
+ enabled: true,
131
+ intervalSteps: 1,
132
+ retentionHours: 24,
133
+ },
134
+ parallelConfig: {
135
+ enabled: true,
136
+ maxConcurrency: 5,
137
+ failureStrategy: 'failFast',
138
+ },
139
+ };
140
+ const executor = createEnhancedAgentExecutor(registry, config);
141
+ // Load example agents if directory exists
142
+ await loadExampleAgents(registry);
143
+ // Set singletons in accessor module
144
+ setSingletons({
145
+ registry,
146
+ executor,
147
+ abilityRegistry,
148
+ abilityManager,
149
+ toolExecutor,
150
+ });
151
+ }
152
+ /**
153
+ * Load example abilities from examples/abilities directory
154
+ */
155
+ async function loadExampleAbilities(abilityRegistry) {
156
+ if (!fs.existsSync(EXAMPLE_ABILITIES_DIR)) {
157
+ return;
158
+ }
159
+ try {
160
+ const loader = createAbilityLoader({
161
+ abilitiesDir: EXAMPLE_ABILITIES_DIR,
162
+ });
163
+ const abilities = await loader.loadAll();
164
+ for (const ability of abilities) {
165
+ try {
166
+ await abilityRegistry.register(ability);
167
+ }
168
+ catch (error) {
169
+ // Log duplicate registration but don't fail
170
+ const isDuplicate = error instanceof Error && error.message.includes('already');
171
+ if (!isDuplicate) {
172
+ console.warn(`Failed to register ability ${ability.abilityId}:`, error instanceof Error ? error.message : error);
173
+ }
174
+ }
175
+ }
176
+ }
177
+ catch (error) {
178
+ // Log but don't fail - example abilities are optional
179
+ console.warn('Failed to load example abilities:', error instanceof Error ? error.message : error);
180
+ }
181
+ }
182
+ /**
183
+ * Load example agents from examples/agents directory
184
+ */
185
+ async function loadExampleAgents(registry) {
186
+ if (!fs.existsSync(EXAMPLE_AGENTS_DIR)) {
187
+ return;
188
+ }
189
+ try {
190
+ const loader = createAgentLoader({
191
+ agentsDir: EXAMPLE_AGENTS_DIR,
192
+ extensions: ['.json', '.yaml', '.yml'],
193
+ });
194
+ const exampleAgents = await loader.loadAll();
195
+ for (const agent of exampleAgents) {
196
+ // Only load if not already registered
197
+ const exists = await registry.exists(agent.agentId);
198
+ if (!exists) {
199
+ try {
200
+ await registry.register(agent);
201
+ }
202
+ catch (error) {
203
+ // Log duplicate registration but don't fail
204
+ const isDuplicate = error instanceof Error && error.message.includes('already');
205
+ if (!isDuplicate) {
206
+ console.warn(`Failed to register agent ${agent.agentId}:`, error instanceof Error ? error.message : error);
207
+ }
208
+ }
209
+ }
210
+ }
211
+ }
212
+ catch (error) {
213
+ // Log but don't fail - example agents are optional
214
+ console.warn('Failed to load example agents:', error instanceof Error ? error.message : error);
215
+ }
216
+ }
217
+ /**
218
+ * Get the shared provider registry
219
+ */
220
+ export async function getSharedProviderRegistry() {
221
+ // Ensure initialization is complete by calling any accessor
222
+ const { getSharedRegistry } = await import('./registry-accessor.js');
223
+ await getSharedRegistry();
224
+ return _providerRegistry;
225
+ }
226
+ /**
227
+ * Reset shared registry (for testing)
228
+ */
229
+ export function resetSharedRegistry() {
230
+ resetAccessor();
231
+ _providerRegistry = null;
232
+ }
233
+ // Register the initializer with the accessor module
234
+ setInitializer(initializeRegistry);
235
+ //# sourceMappingURL=shared-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-registry.js","sourceRoot":"","sources":["../src/shared-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,6BAA6B,EAC7B,2BAA2B,EAC3B,4BAA4B,EAC5B,iBAAiB,EAIjB,2BAA2B,GAC5B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAEL,0BAA0B,EAC1B,0BAA0B,EAC1B,sBAAsB,EACtB,aAAa,EACb,eAAe,EACf,wBAAwB,EACxB,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,6BAA6B,GAE9B,MAAM,+BAA+B,CAAC;AACvC,sDAAsD;AACtD,OAAO,EAAE,sBAAsB,EAAyB,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EACL,cAAc,EACd,aAAa,EACb,mBAAmB,IAAI,aAAa,GACrC,MAAM,wBAAwB,CAAC;AAEhC,2DAA2D;AAC3D,yDAAyD;AACzD,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,EACxB,uBAAuB,EACvB,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,QAAQ,EACR,UAAU,EACV,WAAW,EACX,YAAY,GACb,MAAM,wBAAwB,CAAC;AAEhC,qCAAqC;AACrC,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;AAEpF,sDAAsD;AACtD,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAE1E,yDAAyD;AACzD,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,6BAA6B,CAAC,YAAY,CAAC,CAAC;AAEnG,2FAA2F;AAC3F,IAAI,iBAAiB,GAA4B,IAAI,CAAC;AAEtD;;;;;;GAMG;AACH,SAAS,wBAAwB,CAAC,QAAqC;IACrE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAErD,OAAO;QACL,KAAK,CAAC,OAAO,CAAC,QAAgB,EAAE,IAA6B;YAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE7B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,sDAAsD;gBACtD,OAAO,0BAA0B,CAC/B,mBAAmB,QAAQ,EAAE,EAC7B,sBAAsB,CAAC,cAAc,EACrC,KAAK,EACL,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CACvB,CAAC;YACJ,CAAC;YAED,IAAI,CAAC;gBACH,6EAA6E;gBAC7E,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;gBAEnC,0BAA0B;gBAC1B,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;gBAE9C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,OAAO,0BAA0B,CAC/B,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAC5D,sBAAsB,CAAC,oBAAoB,EAC3C,IAAI,EAAE,iCAAiC;oBACvC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CACvB,CAAC;gBACJ,CAAC;gBAED,8DAA8D;gBAC9D,OAAO,0BAA0B,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;YACpE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,0BAA0B,CAC/B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,8BAA8B,EACvE,sBAAsB,CAAC,oBAAoB,EAC3C,IAAI,EACJ,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CACvB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,eAAe,CAAC,QAAgB;YAC9B,OAAO,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;QAED,iBAAiB;YACf,OAAO,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;QAChC,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,MAAqB;IACnD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,6BAA6B;IAC7B,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAClE,IAAI,WAAW,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;QACpC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,uBAAuB;IACvB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;QAC/B,OAAO,WAAW,CAAC,IAAI,CAAC;IAC1B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,kBAAkB;IAC/B,2BAA2B;IAC3B,iBAAiB,GAAG,sBAAsB,EAAE,CAAC;IAE7C,yBAAyB;IACzB,MAAM,cAAc,GAAG,4BAA4B,CAAC,iBAAiB,EAAE;QACrE,eAAe,EAAE,gBAAgB;QACjC,cAAc,EAAE,wBAAwB;KACzC,CAAC,CAAC;IAEH,yEAAyE;IACzE,MAAM,YAAY,GAAG,wBAAwB,CAAC,aAAa,CAAC,CAAC;IAE7D,wDAAwD;IACxD,MAAM,eAAe,GAAG,qBAAqB,EAAE,CAAC;IAChD,MAAM,cAAc,GAAG,oBAAoB,CAAC,eAAe,CAAC,CAAC;IAE7D,yBAAyB;IACzB,MAAM,oBAAoB,CAAC,eAAe,CAAC,CAAC;IAE5C,mCAAmC;IACnC,MAAM,QAAQ,GAAG,6BAA6B,CAAC;QAC7C,WAAW,EAAE,kBAAkB;QAC/B,SAAS,EAAE,IAAI;QACf,UAAU,EAAE,IAAI;KACjB,CAAC,CAAC;IAEH,mFAAmF;IACnF,MAAM,MAAM,GAA8B;QACxC,GAAG,2BAA2B;QAC9B,cAAc;QACd,6EAA6E;QAC7E,YAAY;QACZ,wDAAwD;QACxD,cAAc;QACd,sBAAsB,EAAE,IAAI;QAC5B,gBAAgB,EAAE,0BAA0B;QAC5C,gBAAgB,EAAE;YAChB,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,CAAC;YAChB,cAAc,EAAE,EAAE;SACnB;QACD,cAAc,EAAE;YACd,OAAO,EAAE,IAAI;YACb,cAAc,EAAE,CAAC;YACjB,eAAe,EAAE,UAAU;SAC5B;KACF,CAAC;IAEF,MAAM,QAAQ,GAAG,2BAA2B,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAE/D,0CAA0C;IAC1C,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAElC,oCAAoC;IACpC,aAAa,CAAC;QACZ,QAAQ;QACR,QAAQ;QACR,eAAe;QACf,cAAc;QACd,YAAY;KACb,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,oBAAoB,CAAC,eAAgC;IAClE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAC1C,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,mBAAmB,CAAC;YACjC,YAAY,EAAE,qBAAqB;SACpC,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QAEzC,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC1C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,4CAA4C;gBAC5C,MAAM,WAAW,GAAG,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAChF,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,OAAO,CAAC,IAAI,CAAC,8BAA8B,OAAO,CAAC,SAAS,GAAG,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACnH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,sDAAsD;QACtD,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACpG,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAAC,QAAuB;IACtD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACvC,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,iBAAiB,CAAC;YAC/B,SAAS,EAAE,kBAAkB;YAC7B,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;SACvC,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QAE7C,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YAClC,sCAAsC;YACtC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,IAAI,CAAC;oBACH,MAAM,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACjC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,4CAA4C;oBAC5C,MAAM,WAAW,GAAG,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;oBAChF,IAAI,CAAC,WAAW,EAAE,CAAC;wBACjB,OAAO,CAAC,IAAI,CAAC,4BAA4B,KAAK,CAAC,OAAO,GAAG,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBAC7G,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,mDAAmD;QACnD,OAAO,CAAC,IAAI,CAAC,gCAAgC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACjG,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,4DAA4D;IAC5D,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACrE,MAAM,iBAAiB,EAAE,CAAC;IAC1B,OAAO,iBAAkB,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,aAAa,EAAE,CAAC;IAChB,iBAAiB,GAAG,IAAI,CAAC;AAC3B,CAAC;AAED,oDAAoD;AACpD,cAAc,CAAC,kBAAkB,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Runs the MCP server over stdio using the official MCP SDK
3
+ * This is the main entry point for the MCP server binary
4
+ */
5
+ export declare function runStdioServer(): Promise<void>;
6
+ //# sourceMappingURL=stdio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../src/stdio.ts"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAmKpD"}
package/dist/stdio.js ADDED
@@ -0,0 +1,152 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
4
+ import { MCP_SERVER_NAME, DEFAULT_SCHEMA_VERSION } from '@defai.digital/contracts';
5
+ import { ALL_TOOLS, TOOL_HANDLERS } from './tools/index.js';
6
+ import { ALL_RESOURCES, readResource } from './resources/index.js';
7
+ import { ALL_PROMPTS, executePrompt, getPrompt } from './prompts/index.js';
8
+ import { getToolPrefix, namespaceTools, resolveToolName } from './tool-namespacing.js';
9
+ /**
10
+ * Runs the MCP server over stdio using the official MCP SDK
11
+ * This is the main entry point for the MCP server binary
12
+ */
13
+ export async function runStdioServer() {
14
+ const toolPrefix = getToolPrefix();
15
+ const listableTools = namespaceTools(ALL_TOOLS, toolPrefix);
16
+ // Create MCP server with official SDK
17
+ const server = new Server({
18
+ name: MCP_SERVER_NAME,
19
+ version: DEFAULT_SCHEMA_VERSION, // Server software version, not protocol version
20
+ }, {
21
+ capabilities: {
22
+ tools: {},
23
+ resources: {},
24
+ prompts: {},
25
+ },
26
+ });
27
+ // Handle tools/list
28
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
29
+ return {
30
+ tools: listableTools.map((tool) => ({
31
+ name: tool.name,
32
+ description: tool.description,
33
+ inputSchema: tool.inputSchema,
34
+ })),
35
+ };
36
+ });
37
+ // Handle tools/call
38
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
39
+ const { name, arguments: args } = request.params;
40
+ const internalName = resolveToolName(name, toolPrefix);
41
+ const handler = TOOL_HANDLERS[internalName];
42
+ if (!handler) {
43
+ return {
44
+ content: [
45
+ {
46
+ type: 'text',
47
+ text: `Unknown tool: ${name}`,
48
+ },
49
+ ],
50
+ isError: true,
51
+ };
52
+ }
53
+ try {
54
+ const result = await handler(args ?? {});
55
+ // Map our MCPToolResult to SDK's CallToolResult format
56
+ return {
57
+ content: result.content.map((c) => ({
58
+ type: c.type,
59
+ text: c.text,
60
+ data: c.data,
61
+ mimeType: c.mimeType,
62
+ })),
63
+ isError: result.isError,
64
+ };
65
+ }
66
+ catch (error) {
67
+ return {
68
+ content: [
69
+ {
70
+ type: 'text',
71
+ text: `Error: ${error instanceof Error ? error.message : 'Unknown error'}`,
72
+ },
73
+ ],
74
+ isError: true,
75
+ };
76
+ }
77
+ });
78
+ // Handle resources/list
79
+ server.setRequestHandler(ListResourcesRequestSchema, async () => {
80
+ return {
81
+ resources: ALL_RESOURCES,
82
+ };
83
+ });
84
+ // Handle resources/read
85
+ server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
86
+ const { uri } = request.params;
87
+ try {
88
+ const content = await readResource(uri);
89
+ return {
90
+ contents: [content],
91
+ };
92
+ }
93
+ catch (error) {
94
+ throw new Error(`Failed to read resource: ${error instanceof Error ? error.message : 'Unknown error'}`);
95
+ }
96
+ });
97
+ // Handle prompts/list
98
+ server.setRequestHandler(ListPromptsRequestSchema, async () => {
99
+ return {
100
+ prompts: ALL_PROMPTS,
101
+ };
102
+ });
103
+ // Handle prompts/get
104
+ server.setRequestHandler(GetPromptRequestSchema, async (request) => {
105
+ const { name, arguments: args } = request.params;
106
+ const prompt = getPrompt(name);
107
+ if (!prompt) {
108
+ throw new Error(`Unknown prompt: ${name}`);
109
+ }
110
+ try {
111
+ const result = await executePrompt(name, args ?? {});
112
+ // Check if result is an error
113
+ if ('error' in result) {
114
+ throw new Error(result.message);
115
+ }
116
+ return result;
117
+ }
118
+ catch (error) {
119
+ throw new Error(`Failed to execute prompt: ${error instanceof Error ? error.message : 'Unknown error'}`);
120
+ }
121
+ });
122
+ // Connect to stdio transport
123
+ const transport = new StdioServerTransport();
124
+ await server.connect(transport);
125
+ // Log startup to stderr (not stdout, to avoid polluting MCP protocol)
126
+ console.error('AutomatosX MCP server started');
127
+ // Keep the server running until stdin closes
128
+ // This is necessary when running through CLI wrappers
129
+ await new Promise((resolve) => {
130
+ // Handle case where stdin is already closed
131
+ if (process.stdin.readableEnded) {
132
+ resolve();
133
+ return;
134
+ }
135
+ // Create handlers that clean up after resolution
136
+ const cleanup = () => {
137
+ process.stdin.removeListener('end', onEnd);
138
+ process.stdin.removeListener('close', onClose);
139
+ };
140
+ const onEnd = () => {
141
+ cleanup();
142
+ resolve();
143
+ };
144
+ const onClose = () => {
145
+ cleanup();
146
+ resolve();
147
+ };
148
+ process.stdin.on('end', onEnd);
149
+ process.stdin.on('close', onClose);
150
+ });
151
+ }
152
+ //# sourceMappingURL=stdio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../src/stdio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { MCPTool } from './types.js';
2
+ /**
3
+ * Reads and sanitizes the tool prefix from environment or provided override.
4
+ *
5
+ * Priority order:
6
+ * 1. prefixOverride parameter (for testing/programmatic use)
7
+ * 2. AX_MCP_TOOL_PREFIX environment variable
8
+ * 3. MCP_TOOL_PREFIX_DEFAULT constant ('ax')
9
+ *
10
+ * Prefix is limited to [a-zA-Z0-9_-] per SEP-986 and will be suffixed with '_'.
11
+ * To disable prefixing, set AX_MCP_TOOL_PREFIX='' (empty string).
12
+ *
13
+ * Example tool names with default prefix:
14
+ * - ax_config_set
15
+ * - ax_agent_list
16
+ * - ax_workflow_run
17
+ */
18
+ export declare function getToolPrefix(prefixOverride?: string): string;
19
+ /**
20
+ * Applies the configured prefix to tool names and drops duplicates after prefixing.
21
+ * Returns a new array to avoid mutating the original tool definitions.
22
+ */
23
+ export declare function namespaceTools(tools: MCPTool[], prefixOverride?: string): MCPTool[];
24
+ /**
25
+ * Strips the configured prefix from a tool name when dispatching calls.
26
+ */
27
+ export declare function resolveToolName(requestedName: string, prefixOverride?: string): string;
28
+ //# sourceMappingURL=tool-namespacing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-namespacing.d.ts","sourceRoot":"","sources":["../src/tool-namespacing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG1C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAyB7D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE,CA2BnF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAMtF"}
@@ -0,0 +1,80 @@
1
+ import { MCP_TOOL_PREFIX_DEFAULT, ENV_MCP_TOOL_PREFIX } from '@defai.digital/contracts';
2
+ /**
3
+ * Reads and sanitizes the tool prefix from environment or provided override.
4
+ *
5
+ * Priority order:
6
+ * 1. prefixOverride parameter (for testing/programmatic use)
7
+ * 2. AX_MCP_TOOL_PREFIX environment variable
8
+ * 3. MCP_TOOL_PREFIX_DEFAULT constant ('ax')
9
+ *
10
+ * Prefix is limited to [a-zA-Z0-9_-] per SEP-986 and will be suffixed with '_'.
11
+ * To disable prefixing, set AX_MCP_TOOL_PREFIX='' (empty string).
12
+ *
13
+ * Example tool names with default prefix:
14
+ * - ax_config_set
15
+ * - ax_agent_list
16
+ * - ax_workflow_run
17
+ */
18
+ export function getToolPrefix(prefixOverride) {
19
+ // Check for explicit override first
20
+ if (prefixOverride !== undefined) {
21
+ const rawPrefix = prefixOverride.trim();
22
+ if (rawPrefix === '') {
23
+ return '';
24
+ }
25
+ const sanitized = rawPrefix.replace(/[^a-zA-Z0-9_-]/g, '_');
26
+ return sanitized.endsWith('_') ? sanitized : `${sanitized}_`;
27
+ }
28
+ // Check environment variable (explicit empty string disables prefixing)
29
+ const envPrefix = process.env[ENV_MCP_TOOL_PREFIX];
30
+ if (envPrefix !== undefined) {
31
+ const rawPrefix = envPrefix.trim();
32
+ if (rawPrefix === '') {
33
+ return '';
34
+ }
35
+ const sanitized = rawPrefix.replace(/[^a-zA-Z0-9_-]/g, '_');
36
+ return sanitized.endsWith('_') ? sanitized : `${sanitized}_`;
37
+ }
38
+ // Use default prefix
39
+ const sanitized = MCP_TOOL_PREFIX_DEFAULT.replace(/[^a-zA-Z0-9_-]/g, '_');
40
+ return sanitized.endsWith('_') ? sanitized : `${sanitized}_`;
41
+ }
42
+ /**
43
+ * Applies the configured prefix to tool names and drops duplicates after prefixing.
44
+ * Returns a new array to avoid mutating the original tool definitions.
45
+ */
46
+ export function namespaceTools(tools, prefixOverride) {
47
+ const prefix = getToolPrefix(prefixOverride);
48
+ if (prefix === '') {
49
+ return tools;
50
+ }
51
+ const seen = new Set();
52
+ const duplicates = [];
53
+ const namespaced = tools
54
+ .map((tool) => {
55
+ const namespacedName = tool.name.startsWith(prefix) ? tool.name : `${prefix}${tool.name}`;
56
+ if (seen.has(namespacedName)) {
57
+ duplicates.push(namespacedName);
58
+ return null;
59
+ }
60
+ seen.add(namespacedName);
61
+ return { ...tool, name: namespacedName };
62
+ })
63
+ .filter((tool) => tool !== null);
64
+ if (duplicates.length > 0) {
65
+ // stderr to avoid polluting MCP protocol stdout
66
+ console.warn(`[MCP] Dropping duplicate tool names after prefixing: ${duplicates.join(', ')}`);
67
+ }
68
+ return namespaced;
69
+ }
70
+ /**
71
+ * Strips the configured prefix from a tool name when dispatching calls.
72
+ */
73
+ export function resolveToolName(requestedName, prefixOverride) {
74
+ const prefix = getToolPrefix(prefixOverride);
75
+ if (prefix !== '' && requestedName.startsWith(prefix)) {
76
+ return requestedName.slice(prefix.length);
77
+ }
78
+ return requestedName;
79
+ }
80
+ //# sourceMappingURL=tool-namespacing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-namespacing.js","sourceRoot":"","sources":["../src/tool-namespacing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Ability MCP Tools
3
+ *
4
+ * Tools for managing abilities - reusable knowledge modules for agents.
5
+ * Uses the shared registry from registry-accessor.ts for unified ability management.
6
+ */
7
+ import type { MCPTool, ToolHandler } from '../types.js';
8
+ /**
9
+ * Ability list tool definition
10
+ * INV-MCP-004: Idempotent - read-only operation
11
+ */
12
+ export declare const abilityListTool: MCPTool;
13
+ /**
14
+ * Ability get tool definition
15
+ * INV-MCP-004: Idempotent - read-only operation
16
+ */
17
+ export declare const abilityGetTool: MCPTool;
18
+ /**
19
+ * Ability inject tool definition
20
+ * INV-MCP-004: Idempotent - returns computed content, no state changes
21
+ */
22
+ export declare const abilityInjectTool: MCPTool;
23
+ /**
24
+ * Ability register tool definition
25
+ * INV-MCP-004: Non-idempotent - creates new ability
26
+ * INV-MCP-002: Side effects - modifies ability registry
27
+ */
28
+ export declare const abilityRegisterTool: MCPTool;
29
+ /**
30
+ * Ability remove tool definition
31
+ * INV-MCP-004: Idempotent - removing non-existent ability returns removed=false
32
+ * INV-MCP-002: Side effects - deletes ability from registry
33
+ */
34
+ export declare const abilityRemoveTool: MCPTool;
35
+ /**
36
+ * Handler for ability_list tool
37
+ */
38
+ export declare const handleAbilityList: ToolHandler;
39
+ /**
40
+ * Handler for ability_get tool
41
+ */
42
+ export declare const handleAbilityGet: ToolHandler;
43
+ /**
44
+ * Handler for ability_inject tool
45
+ */
46
+ export declare const handleAbilityInject: ToolHandler;
47
+ /**
48
+ * Handler for ability_register tool
49
+ */
50
+ export declare const handleAbilityRegister: ToolHandler;
51
+ /**
52
+ * Handler for ability_remove tool
53
+ */
54
+ export declare const handleAbilityRemove: ToolHandler;
55
+ //# sourceMappingURL=ability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ability.d.ts","sourceRoot":"","sources":["../../src/tools/ability.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAmBxD;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,OAkD7B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,OAmC5B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,OAiD/B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,OAgEjC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,OAuB/B,CAAC;AAMF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,WA2D/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,WAiE9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAyDjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,WA8EnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAuDjC,CAAC"}