@claude-flow/mcp 3.0.0-alpha.1

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 (92) hide show
  1. package/.agentic-flow/intelligence.json +16 -0
  2. package/README.md +428 -0
  3. package/__tests__/integration.test.ts +449 -0
  4. package/__tests__/mcp.test.ts +641 -0
  5. package/dist/connection-pool.d.ts +36 -0
  6. package/dist/connection-pool.d.ts.map +1 -0
  7. package/dist/connection-pool.js +273 -0
  8. package/dist/connection-pool.js.map +1 -0
  9. package/dist/index.d.ts +75 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +85 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/oauth.d.ts +146 -0
  14. package/dist/oauth.d.ts.map +1 -0
  15. package/dist/oauth.js +318 -0
  16. package/dist/oauth.js.map +1 -0
  17. package/dist/prompt-registry.d.ts +90 -0
  18. package/dist/prompt-registry.d.ts.map +1 -0
  19. package/dist/prompt-registry.js +209 -0
  20. package/dist/prompt-registry.js.map +1 -0
  21. package/dist/rate-limiter.d.ts +86 -0
  22. package/dist/rate-limiter.d.ts.map +1 -0
  23. package/dist/rate-limiter.js +197 -0
  24. package/dist/rate-limiter.js.map +1 -0
  25. package/dist/resource-registry.d.ts +144 -0
  26. package/dist/resource-registry.d.ts.map +1 -0
  27. package/dist/resource-registry.js +405 -0
  28. package/dist/resource-registry.js.map +1 -0
  29. package/dist/sampling.d.ts +102 -0
  30. package/dist/sampling.d.ts.map +1 -0
  31. package/dist/sampling.js +268 -0
  32. package/dist/sampling.js.map +1 -0
  33. package/dist/schema-validator.d.ts +30 -0
  34. package/dist/schema-validator.d.ts.map +1 -0
  35. package/dist/schema-validator.js +182 -0
  36. package/dist/schema-validator.js.map +1 -0
  37. package/dist/server.d.ts +122 -0
  38. package/dist/server.d.ts.map +1 -0
  39. package/dist/server.js +829 -0
  40. package/dist/server.js.map +1 -0
  41. package/dist/session-manager.d.ts +55 -0
  42. package/dist/session-manager.d.ts.map +1 -0
  43. package/dist/session-manager.js +252 -0
  44. package/dist/session-manager.js.map +1 -0
  45. package/dist/task-manager.d.ts +81 -0
  46. package/dist/task-manager.d.ts.map +1 -0
  47. package/dist/task-manager.js +337 -0
  48. package/dist/task-manager.js.map +1 -0
  49. package/dist/tool-registry.d.ts +88 -0
  50. package/dist/tool-registry.d.ts.map +1 -0
  51. package/dist/tool-registry.js +353 -0
  52. package/dist/tool-registry.js.map +1 -0
  53. package/dist/transport/http.d.ts +55 -0
  54. package/dist/transport/http.d.ts.map +1 -0
  55. package/dist/transport/http.js +446 -0
  56. package/dist/transport/http.js.map +1 -0
  57. package/dist/transport/index.d.ts +50 -0
  58. package/dist/transport/index.d.ts.map +1 -0
  59. package/dist/transport/index.js +181 -0
  60. package/dist/transport/index.js.map +1 -0
  61. package/dist/transport/stdio.d.ts +43 -0
  62. package/dist/transport/stdio.d.ts.map +1 -0
  63. package/dist/transport/stdio.js +194 -0
  64. package/dist/transport/stdio.js.map +1 -0
  65. package/dist/transport/websocket.d.ts +65 -0
  66. package/dist/transport/websocket.d.ts.map +1 -0
  67. package/dist/transport/websocket.js +314 -0
  68. package/dist/transport/websocket.js.map +1 -0
  69. package/dist/types.d.ts +473 -0
  70. package/dist/types.d.ts.map +1 -0
  71. package/dist/types.js +40 -0
  72. package/dist/types.js.map +1 -0
  73. package/package.json +42 -0
  74. package/src/connection-pool.ts +344 -0
  75. package/src/index.ts +253 -0
  76. package/src/oauth.ts +447 -0
  77. package/src/prompt-registry.ts +296 -0
  78. package/src/rate-limiter.ts +266 -0
  79. package/src/resource-registry.ts +530 -0
  80. package/src/sampling.ts +363 -0
  81. package/src/schema-validator.ts +213 -0
  82. package/src/server.ts +1134 -0
  83. package/src/session-manager.ts +339 -0
  84. package/src/task-manager.ts +427 -0
  85. package/src/tool-registry.ts +475 -0
  86. package/src/transport/http.ts +532 -0
  87. package/src/transport/index.ts +233 -0
  88. package/src/transport/stdio.ts +252 -0
  89. package/src/transport/websocket.ts +396 -0
  90. package/src/types.ts +664 -0
  91. package/tsconfig.json +20 -0
  92. package/vitest.config.ts +13 -0
@@ -0,0 +1,268 @@
1
+ /**
2
+ * @claude-flow/mcp - Sampling (Server-Initiated LLM)
3
+ *
4
+ * MCP 2025-11-25 compliant sampling for server-initiated LLM calls
5
+ */
6
+ import { EventEmitter } from 'events';
7
+ const DEFAULT_CONFIG = {
8
+ defaultModelPreferences: {
9
+ intelligencePriority: 0.5,
10
+ speedPriority: 0.3,
11
+ costPriority: 0.2,
12
+ },
13
+ maxTokensLimit: 4096,
14
+ defaultTemperature: 0.7,
15
+ timeout: 30000,
16
+ enableLogging: true,
17
+ };
18
+ export class SamplingManager extends EventEmitter {
19
+ logger;
20
+ config;
21
+ providers = new Map();
22
+ defaultProvider;
23
+ requestCount = 0;
24
+ totalTokens = 0;
25
+ constructor(logger, config = {}) {
26
+ super();
27
+ this.logger = logger;
28
+ this.config = { ...DEFAULT_CONFIG, ...config };
29
+ }
30
+ /**
31
+ * Register an LLM provider
32
+ */
33
+ registerProvider(provider, isDefault = false) {
34
+ this.providers.set(provider.name, provider);
35
+ if (isDefault || !this.defaultProvider) {
36
+ this.defaultProvider = provider.name;
37
+ }
38
+ this.logger.info('LLM provider registered', { name: provider.name, isDefault });
39
+ this.emit('provider:registered', { name: provider.name });
40
+ }
41
+ /**
42
+ * Unregister a provider
43
+ */
44
+ unregisterProvider(name) {
45
+ const removed = this.providers.delete(name);
46
+ if (removed && this.defaultProvider === name) {
47
+ this.defaultProvider = this.providers.keys().next().value;
48
+ }
49
+ return removed;
50
+ }
51
+ /**
52
+ * Create a message (sampling/createMessage)
53
+ */
54
+ async createMessage(request, context) {
55
+ const startTime = Date.now();
56
+ this.requestCount++;
57
+ // Validate request
58
+ this.validateRequest(request);
59
+ // Select provider
60
+ const provider = this.selectProvider(request.modelPreferences);
61
+ if (!provider) {
62
+ throw new Error('No LLM provider available');
63
+ }
64
+ // Apply defaults
65
+ const fullRequest = this.applyDefaults(request);
66
+ if (this.config.enableLogging) {
67
+ this.logger.debug('Sampling request', {
68
+ provider: provider.name,
69
+ messageCount: request.messages.length,
70
+ maxTokens: fullRequest.maxTokens,
71
+ sessionId: context?.sessionId,
72
+ });
73
+ }
74
+ this.emit('sampling:start', { provider: provider.name, context });
75
+ try {
76
+ // Call provider with timeout
77
+ const result = await this.callWithTimeout(provider.createMessage(fullRequest), this.config.timeout);
78
+ const duration = Date.now() - startTime;
79
+ if (this.config.enableLogging) {
80
+ this.logger.info('Sampling complete', {
81
+ provider: provider.name,
82
+ duration: `${duration}ms`,
83
+ stopReason: result.stopReason,
84
+ });
85
+ }
86
+ this.emit('sampling:complete', {
87
+ provider: provider.name,
88
+ duration,
89
+ result,
90
+ context,
91
+ });
92
+ return result;
93
+ }
94
+ catch (error) {
95
+ const duration = Date.now() - startTime;
96
+ this.logger.error('Sampling failed', {
97
+ provider: provider.name,
98
+ duration: `${duration}ms`,
99
+ error,
100
+ });
101
+ this.emit('sampling:error', {
102
+ provider: provider.name,
103
+ duration,
104
+ error,
105
+ context,
106
+ });
107
+ throw error;
108
+ }
109
+ }
110
+ /**
111
+ * Check if sampling is available
112
+ */
113
+ async isAvailable() {
114
+ if (this.providers.size === 0) {
115
+ return false;
116
+ }
117
+ for (const provider of this.providers.values()) {
118
+ if (await provider.isAvailable()) {
119
+ return true;
120
+ }
121
+ }
122
+ return false;
123
+ }
124
+ /**
125
+ * Get available providers
126
+ */
127
+ getProviders() {
128
+ return Array.from(this.providers.keys());
129
+ }
130
+ /**
131
+ * Get stats
132
+ */
133
+ getStats() {
134
+ return {
135
+ requestCount: this.requestCount,
136
+ totalTokens: this.totalTokens,
137
+ providerCount: this.providers.size,
138
+ defaultProvider: this.defaultProvider,
139
+ };
140
+ }
141
+ /**
142
+ * Validate sampling request
143
+ */
144
+ validateRequest(request) {
145
+ if (!request.messages || request.messages.length === 0) {
146
+ throw new Error('Messages are required');
147
+ }
148
+ if (request.maxTokens > this.config.maxTokensLimit) {
149
+ throw new Error(`maxTokens exceeds limit of ${this.config.maxTokensLimit}`);
150
+ }
151
+ if (request.temperature !== undefined && (request.temperature < 0 || request.temperature > 2)) {
152
+ throw new Error('Temperature must be between 0 and 2');
153
+ }
154
+ }
155
+ /**
156
+ * Select provider based on preferences
157
+ */
158
+ selectProvider(preferences) {
159
+ // If hints provided, try to find matching provider
160
+ if (preferences?.hints) {
161
+ for (const hint of preferences.hints) {
162
+ if (hint.name && this.providers.has(hint.name)) {
163
+ return this.providers.get(hint.name);
164
+ }
165
+ }
166
+ }
167
+ // Use default provider
168
+ if (this.defaultProvider) {
169
+ return this.providers.get(this.defaultProvider);
170
+ }
171
+ // Return first available
172
+ return this.providers.values().next().value;
173
+ }
174
+ /**
175
+ * Apply default values to request
176
+ */
177
+ applyDefaults(request) {
178
+ return {
179
+ ...request,
180
+ modelPreferences: request.modelPreferences || this.config.defaultModelPreferences,
181
+ temperature: request.temperature ?? this.config.defaultTemperature,
182
+ maxTokens: Math.min(request.maxTokens, this.config.maxTokensLimit),
183
+ };
184
+ }
185
+ /**
186
+ * Call with timeout
187
+ */
188
+ async callWithTimeout(promise, timeout) {
189
+ return Promise.race([
190
+ promise,
191
+ new Promise((_, reject) => {
192
+ setTimeout(() => reject(new Error('Sampling timeout')), timeout);
193
+ }),
194
+ ]);
195
+ }
196
+ }
197
+ export function createSamplingManager(logger, config) {
198
+ return new SamplingManager(logger, config);
199
+ }
200
+ /**
201
+ * Create a mock LLM provider for testing
202
+ */
203
+ export function createMockProvider(name = 'mock') {
204
+ return {
205
+ name,
206
+ async createMessage(request) {
207
+ // Simulate processing time
208
+ await new Promise((r) => setTimeout(r, 100));
209
+ return {
210
+ role: 'assistant',
211
+ content: {
212
+ type: 'text',
213
+ text: `Mock response to: ${JSON.stringify(request.messages[0]?.content)}`,
214
+ },
215
+ model: `${name}-model`,
216
+ stopReason: 'endTurn',
217
+ };
218
+ },
219
+ async isAvailable() {
220
+ return true;
221
+ },
222
+ };
223
+ }
224
+ /**
225
+ * Create an Anthropic provider (requires API key)
226
+ */
227
+ export function createAnthropicProvider(apiKey) {
228
+ return {
229
+ name: 'anthropic',
230
+ async createMessage(request) {
231
+ const response = await fetch('https://api.anthropic.com/v1/messages', {
232
+ method: 'POST',
233
+ headers: {
234
+ 'Content-Type': 'application/json',
235
+ 'x-api-key': apiKey,
236
+ 'anthropic-version': '2023-06-01',
237
+ },
238
+ body: JSON.stringify({
239
+ model: 'claude-3-haiku-20240307',
240
+ max_tokens: request.maxTokens,
241
+ temperature: request.temperature,
242
+ system: request.systemPrompt,
243
+ messages: request.messages.map((m) => ({
244
+ role: m.role,
245
+ content: m.content.type === 'text' ? m.content.text : m.content,
246
+ })),
247
+ }),
248
+ });
249
+ if (!response.ok) {
250
+ throw new Error(`Anthropic API error: ${response.status}`);
251
+ }
252
+ const data = await response.json();
253
+ return {
254
+ role: 'assistant',
255
+ content: {
256
+ type: 'text',
257
+ text: data.content[0]?.text || '',
258
+ },
259
+ model: data.model,
260
+ stopReason: data.stop_reason === 'end_turn' ? 'endTurn' : 'maxTokens',
261
+ };
262
+ },
263
+ async isAvailable() {
264
+ return !!apiKey;
265
+ },
266
+ };
267
+ }
268
+ //# sourceMappingURL=sampling.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sampling.js","sourceRoot":"","sources":["../src/sampling.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @claude-flow/mcp - JSON Schema Validator
3
+ *
4
+ * Lightweight JSON Schema validation for tool inputs
5
+ * Implements JSON Schema Draft 2020-12 subset
6
+ */
7
+ import type { JSONSchema } from './types.js';
8
+ export interface ValidationError {
9
+ path: string;
10
+ message: string;
11
+ keyword: string;
12
+ params?: Record<string, unknown>;
13
+ }
14
+ export interface ValidationResult {
15
+ valid: boolean;
16
+ errors: ValidationError[];
17
+ }
18
+ /**
19
+ * Validate data against JSON Schema
20
+ */
21
+ export declare function validateSchema(data: unknown, schema: JSONSchema, path?: string): ValidationResult;
22
+ /**
23
+ * Format validation errors for display
24
+ */
25
+ export declare function formatValidationErrors(errors: ValidationError[]): string;
26
+ /**
27
+ * Create a validator function for a specific schema
28
+ */
29
+ export declare function createValidator(schema: JSONSchema): (data: unknown) => ValidationResult;
30
+ //# sourceMappingURL=schema-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-validator.d.ts","sourceRoot":"","sources":["../src/schema-validator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,UAAU,EAClB,IAAI,GAAE,MAAW,GAChB,gBAAgB,CAuJlB;AAqBD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAExE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,gBAAgB,CAEvF"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * @claude-flow/mcp - JSON Schema Validator
3
+ *
4
+ * Lightweight JSON Schema validation for tool inputs
5
+ * Implements JSON Schema Draft 2020-12 subset
6
+ */
7
+ /**
8
+ * Validate data against JSON Schema
9
+ */
10
+ export function validateSchema(data, schema, path = '') {
11
+ const errors = [];
12
+ // Type validation
13
+ if (schema.type) {
14
+ const typeValid = validateType(data, schema.type);
15
+ if (!typeValid) {
16
+ errors.push({
17
+ path: path || 'root',
18
+ message: `Expected type "${schema.type}", got "${typeof data}"`,
19
+ keyword: 'type',
20
+ params: { expected: schema.type, actual: typeof data },
21
+ });
22
+ return { valid: false, errors };
23
+ }
24
+ }
25
+ // Null check
26
+ if (data === null || data === undefined) {
27
+ if (schema.type && schema.type !== 'null') {
28
+ errors.push({
29
+ path: path || 'root',
30
+ message: 'Value cannot be null or undefined',
31
+ keyword: 'type',
32
+ });
33
+ }
34
+ return { valid: errors.length === 0, errors };
35
+ }
36
+ // String validations
37
+ if (schema.type === 'string' && typeof data === 'string') {
38
+ if (schema.minLength !== undefined && data.length < schema.minLength) {
39
+ errors.push({
40
+ path,
41
+ message: `String length must be >= ${schema.minLength}`,
42
+ keyword: 'minLength',
43
+ params: { limit: schema.minLength, actual: data.length },
44
+ });
45
+ }
46
+ if (schema.maxLength !== undefined && data.length > schema.maxLength) {
47
+ errors.push({
48
+ path,
49
+ message: `String length must be <= ${schema.maxLength}`,
50
+ keyword: 'maxLength',
51
+ params: { limit: schema.maxLength, actual: data.length },
52
+ });
53
+ }
54
+ if (schema.pattern) {
55
+ const regex = new RegExp(schema.pattern);
56
+ if (!regex.test(data)) {
57
+ errors.push({
58
+ path,
59
+ message: `String must match pattern "${schema.pattern}"`,
60
+ keyword: 'pattern',
61
+ params: { pattern: schema.pattern },
62
+ });
63
+ }
64
+ }
65
+ if (schema.enum && !schema.enum.includes(data)) {
66
+ errors.push({
67
+ path,
68
+ message: `Value must be one of: ${schema.enum.join(', ')}`,
69
+ keyword: 'enum',
70
+ params: { allowedValues: schema.enum },
71
+ });
72
+ }
73
+ }
74
+ // Number validations
75
+ if ((schema.type === 'number' || schema.type === 'integer') && typeof data === 'number') {
76
+ if (schema.type === 'integer' && !Number.isInteger(data)) {
77
+ errors.push({
78
+ path,
79
+ message: 'Value must be an integer',
80
+ keyword: 'type',
81
+ });
82
+ }
83
+ if (schema.minimum !== undefined && data < schema.minimum) {
84
+ errors.push({
85
+ path,
86
+ message: `Value must be >= ${schema.minimum}`,
87
+ keyword: 'minimum',
88
+ params: { limit: schema.minimum, actual: data },
89
+ });
90
+ }
91
+ if (schema.maximum !== undefined && data > schema.maximum) {
92
+ errors.push({
93
+ path,
94
+ message: `Value must be <= ${schema.maximum}`,
95
+ keyword: 'maximum',
96
+ params: { limit: schema.maximum, actual: data },
97
+ });
98
+ }
99
+ }
100
+ // Array validations
101
+ if (schema.type === 'array' && Array.isArray(data)) {
102
+ if (schema.items) {
103
+ for (let i = 0; i < data.length; i++) {
104
+ const itemResult = validateSchema(data[i], schema.items, `${path}[${i}]`);
105
+ errors.push(...itemResult.errors);
106
+ }
107
+ }
108
+ }
109
+ // Object validations
110
+ if (schema.type === 'object' && typeof data === 'object' && !Array.isArray(data)) {
111
+ const obj = data;
112
+ // Required properties
113
+ if (schema.required) {
114
+ for (const requiredProp of schema.required) {
115
+ if (!(requiredProp in obj)) {
116
+ errors.push({
117
+ path: path ? `${path}.${requiredProp}` : requiredProp,
118
+ message: `Required property "${requiredProp}" is missing`,
119
+ keyword: 'required',
120
+ params: { missingProperty: requiredProp },
121
+ });
122
+ }
123
+ }
124
+ }
125
+ // Property validations
126
+ if (schema.properties) {
127
+ for (const [propName, propSchema] of Object.entries(schema.properties)) {
128
+ if (propName in obj) {
129
+ const propPath = path ? `${path}.${propName}` : propName;
130
+ const propResult = validateSchema(obj[propName], propSchema, propPath);
131
+ errors.push(...propResult.errors);
132
+ }
133
+ }
134
+ }
135
+ // Additional properties check
136
+ if (schema.additionalProperties === false && schema.properties) {
137
+ const allowedProps = new Set(Object.keys(schema.properties));
138
+ for (const propName of Object.keys(obj)) {
139
+ if (!allowedProps.has(propName)) {
140
+ errors.push({
141
+ path: path ? `${path}.${propName}` : propName,
142
+ message: `Additional property "${propName}" is not allowed`,
143
+ keyword: 'additionalProperties',
144
+ params: { additionalProperty: propName },
145
+ });
146
+ }
147
+ }
148
+ }
149
+ }
150
+ return { valid: errors.length === 0, errors };
151
+ }
152
+ /**
153
+ * Validate type
154
+ */
155
+ function validateType(data, expectedType) {
156
+ if (expectedType === 'null') {
157
+ return data === null;
158
+ }
159
+ if (expectedType === 'array') {
160
+ return Array.isArray(data);
161
+ }
162
+ if (expectedType === 'integer') {
163
+ return typeof data === 'number' && Number.isInteger(data);
164
+ }
165
+ if (expectedType === 'object') {
166
+ return typeof data === 'object' && data !== null && !Array.isArray(data);
167
+ }
168
+ return typeof data === expectedType;
169
+ }
170
+ /**
171
+ * Format validation errors for display
172
+ */
173
+ export function formatValidationErrors(errors) {
174
+ return errors.map((e) => `${e.path}: ${e.message}`).join('; ');
175
+ }
176
+ /**
177
+ * Create a validator function for a specific schema
178
+ */
179
+ export function createValidator(schema) {
180
+ return (data) => validateSchema(data, schema);
181
+ }
182
+ //# sourceMappingURL=schema-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-validator.js","sourceRoot":"","sources":["../src/schema-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * @claude-flow/mcp - MCP Server
3
+ *
4
+ * High-performance MCP server implementation
5
+ */
6
+ import { EventEmitter } from 'events';
7
+ import type { MCPServerConfig, MCPSession, MCPTool, MCPServerMetrics, ILogger } from './types.js';
8
+ import { ResourceRegistry } from './resource-registry.js';
9
+ import { PromptRegistry } from './prompt-registry.js';
10
+ import { TaskManager } from './task-manager.js';
11
+ import { RateLimiter } from './rate-limiter.js';
12
+ import { SamplingManager, type LLMProvider } from './sampling.js';
13
+ export interface IMCPServer {
14
+ start(): Promise<void>;
15
+ stop(): Promise<void>;
16
+ registerTool(tool: MCPTool): boolean;
17
+ registerTools(tools: MCPTool[]): {
18
+ registered: number;
19
+ failed: string[];
20
+ };
21
+ getHealthStatus(): Promise<{
22
+ healthy: boolean;
23
+ error?: string;
24
+ metrics?: Record<string, number>;
25
+ }>;
26
+ getMetrics(): MCPServerMetrics;
27
+ getSessions(): MCPSession[];
28
+ getSession(sessionId: string): MCPSession | undefined;
29
+ terminateSession(sessionId: string): boolean;
30
+ }
31
+ export declare class MCPServer extends EventEmitter implements IMCPServer {
32
+ private readonly logger;
33
+ private readonly orchestrator?;
34
+ private readonly swarmCoordinator?;
35
+ private readonly config;
36
+ private readonly toolRegistry;
37
+ private readonly sessionManager;
38
+ private readonly resourceRegistry;
39
+ private readonly promptRegistry;
40
+ private readonly taskManager;
41
+ private readonly connectionPool?;
42
+ private readonly transportManager;
43
+ private readonly rateLimiter;
44
+ private readonly samplingManager;
45
+ private transport?;
46
+ private running;
47
+ private startTime?;
48
+ private startupDuration?;
49
+ private currentSession?;
50
+ private resourceSubscriptions;
51
+ private readonly serverInfo;
52
+ private readonly protocolVersion;
53
+ private capabilities;
54
+ private requestStats;
55
+ constructor(config: Partial<MCPServerConfig>, logger: ILogger, orchestrator?: unknown | undefined, swarmCoordinator?: unknown | undefined);
56
+ /**
57
+ * Get resource registry for external registration
58
+ */
59
+ getResourceRegistry(): ResourceRegistry;
60
+ /**
61
+ * Get prompt registry for external registration
62
+ */
63
+ getPromptRegistry(): PromptRegistry;
64
+ /**
65
+ * Get task manager for async operations
66
+ */
67
+ getTaskManager(): TaskManager;
68
+ /**
69
+ * Get rate limiter for configuration
70
+ */
71
+ getRateLimiter(): RateLimiter;
72
+ /**
73
+ * Get sampling manager for LLM provider registration
74
+ */
75
+ getSamplingManager(): SamplingManager;
76
+ /**
77
+ * Register an LLM provider for sampling
78
+ */
79
+ registerLLMProvider(provider: LLMProvider, isDefault?: boolean): void;
80
+ start(): Promise<void>;
81
+ stop(): Promise<void>;
82
+ registerTool(tool: MCPTool): boolean;
83
+ registerTools(tools: MCPTool[]): {
84
+ registered: number;
85
+ failed: string[];
86
+ };
87
+ unregisterTool(name: string): boolean;
88
+ getHealthStatus(): Promise<{
89
+ healthy: boolean;
90
+ error?: string;
91
+ metrics?: Record<string, number>;
92
+ }>;
93
+ getMetrics(): MCPServerMetrics;
94
+ getSessions(): MCPSession[];
95
+ getSession(sessionId: string): MCPSession | undefined;
96
+ terminateSession(sessionId: string): boolean;
97
+ private handleRequest;
98
+ private handleNotification;
99
+ private handleInitialize;
100
+ private routeRequest;
101
+ private handleToolsList;
102
+ private handleToolsCall;
103
+ private handleToolExecution;
104
+ private handleResourcesList;
105
+ private handleResourcesRead;
106
+ private handleResourcesSubscribe;
107
+ private handleResourcesUnsubscribe;
108
+ private handlePromptsList;
109
+ private handlePromptsGet;
110
+ private handleTasksStatus;
111
+ private handleTasksCancel;
112
+ private handleCompletion;
113
+ private handleLoggingSetLevel;
114
+ private handleSamplingCreateMessage;
115
+ private sendNotification;
116
+ private getOrCreateSession;
117
+ private createErrorResponse;
118
+ private registerBuiltInTools;
119
+ private setupEventHandlers;
120
+ }
121
+ export declare function createMCPServer(config: Partial<MCPServerConfig>, logger: ILogger, orchestrator?: unknown, swarmCoordinator?: unknown): MCPServer;
122
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}