opalserve 0.1.0

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 (158) hide show
  1. package/.env.example +19 -0
  2. package/AGENTS.md +23 -0
  3. package/README.md +109 -0
  4. package/config/servers.example.yaml +67 -0
  5. package/config/servers.yaml +2 -0
  6. package/dist/cli/discover.d.ts +3 -0
  7. package/dist/cli/discover.d.ts.map +1 -0
  8. package/dist/cli/discover.js +160 -0
  9. package/dist/cli/discover.js.map +1 -0
  10. package/dist/cli/index.d.ts +3 -0
  11. package/dist/cli/index.d.ts.map +1 -0
  12. package/dist/cli/index.js +32 -0
  13. package/dist/cli/index.js.map +1 -0
  14. package/dist/connectors/base.d.ts +49 -0
  15. package/dist/connectors/base.d.ts.map +1 -0
  16. package/dist/connectors/base.js +45 -0
  17. package/dist/connectors/base.js.map +1 -0
  18. package/dist/connectors/custom.d.ts +19 -0
  19. package/dist/connectors/custom.d.ts.map +1 -0
  20. package/dist/connectors/custom.js +129 -0
  21. package/dist/connectors/custom.js.map +1 -0
  22. package/dist/connectors/github.d.ts +18 -0
  23. package/dist/connectors/github.d.ts.map +1 -0
  24. package/dist/connectors/github.js +188 -0
  25. package/dist/connectors/github.js.map +1 -0
  26. package/dist/connectors/google-drive.d.ts +18 -0
  27. package/dist/connectors/google-drive.d.ts.map +1 -0
  28. package/dist/connectors/google-drive.js +209 -0
  29. package/dist/connectors/google-drive.js.map +1 -0
  30. package/dist/connectors/index.d.ts +11 -0
  31. package/dist/connectors/index.d.ts.map +1 -0
  32. package/dist/connectors/index.js +76 -0
  33. package/dist/connectors/index.js.map +1 -0
  34. package/dist/connectors/postgres.d.ts +18 -0
  35. package/dist/connectors/postgres.d.ts.map +1 -0
  36. package/dist/connectors/postgres.js +140 -0
  37. package/dist/connectors/postgres.js.map +1 -0
  38. package/dist/connectors/slack.d.ts +18 -0
  39. package/dist/connectors/slack.d.ts.map +1 -0
  40. package/dist/connectors/slack.js +181 -0
  41. package/dist/connectors/slack.js.map +1 -0
  42. package/dist/core/auth.d.ts +26 -0
  43. package/dist/core/auth.d.ts.map +1 -0
  44. package/dist/core/auth.js +81 -0
  45. package/dist/core/auth.js.map +1 -0
  46. package/dist/core/registry.d.ts +33 -0
  47. package/dist/core/registry.d.ts.map +1 -0
  48. package/dist/core/registry.js +237 -0
  49. package/dist/core/registry.js.map +1 -0
  50. package/dist/core/tokenizer.d.ts +16 -0
  51. package/dist/core/tokenizer.d.ts.map +1 -0
  52. package/dist/core/tokenizer.js +29 -0
  53. package/dist/core/tokenizer.js.map +1 -0
  54. package/dist/governance/audit.d.ts +27 -0
  55. package/dist/governance/audit.d.ts.map +1 -0
  56. package/dist/governance/audit.js +149 -0
  57. package/dist/governance/audit.js.map +1 -0
  58. package/dist/governance/index.d.ts +5 -0
  59. package/dist/governance/index.d.ts.map +1 -0
  60. package/dist/governance/index.js +5 -0
  61. package/dist/governance/index.js.map +1 -0
  62. package/dist/governance/policy.d.ts +20 -0
  63. package/dist/governance/policy.d.ts.map +1 -0
  64. package/dist/governance/policy.js +162 -0
  65. package/dist/governance/policy.js.map +1 -0
  66. package/dist/governance/rate-limiter.d.ts +20 -0
  67. package/dist/governance/rate-limiter.d.ts.map +1 -0
  68. package/dist/governance/rate-limiter.js +73 -0
  69. package/dist/governance/rate-limiter.js.map +1 -0
  70. package/dist/governance/types.d.ts +246 -0
  71. package/dist/governance/types.d.ts.map +1 -0
  72. package/dist/governance/types.js +72 -0
  73. package/dist/governance/types.js.map +1 -0
  74. package/dist/identity/access-control.d.ts +15 -0
  75. package/dist/identity/access-control.d.ts.map +1 -0
  76. package/dist/identity/access-control.js +81 -0
  77. package/dist/identity/access-control.js.map +1 -0
  78. package/dist/identity/index.d.ts +4 -0
  79. package/dist/identity/index.d.ts.map +1 -0
  80. package/dist/identity/index.js +4 -0
  81. package/dist/identity/index.js.map +1 -0
  82. package/dist/identity/manager.d.ts +29 -0
  83. package/dist/identity/manager.d.ts.map +1 -0
  84. package/dist/identity/manager.js +167 -0
  85. package/dist/identity/manager.js.map +1 -0
  86. package/dist/identity/types.d.ts +237 -0
  87. package/dist/identity/types.d.ts.map +1 -0
  88. package/dist/identity/types.js +80 -0
  89. package/dist/identity/types.js.map +1 -0
  90. package/dist/index.d.ts +13 -0
  91. package/dist/index.d.ts.map +1 -0
  92. package/dist/index.js +10 -0
  93. package/dist/index.js.map +1 -0
  94. package/dist/registry/server.d.ts +14 -0
  95. package/dist/registry/server.d.ts.map +1 -0
  96. package/dist/registry/server.js +173 -0
  97. package/dist/registry/server.js.map +1 -0
  98. package/dist/types/index.d.ts +639 -0
  99. package/dist/types/index.d.ts.map +1 -0
  100. package/dist/types/index.js +76 -0
  101. package/dist/types/index.js.map +1 -0
  102. package/dist/utils/config.d.ts +29 -0
  103. package/dist/utils/config.d.ts.map +1 -0
  104. package/dist/utils/config.js +47 -0
  105. package/dist/utils/config.js.map +1 -0
  106. package/dist/utils/index.d.ts +7 -0
  107. package/dist/utils/index.d.ts.map +1 -0
  108. package/dist/utils/index.js +44 -0
  109. package/dist/utils/index.js.map +1 -0
  110. package/dist/workflow/engine.d.ts +18 -0
  111. package/dist/workflow/engine.d.ts.map +1 -0
  112. package/dist/workflow/engine.js +155 -0
  113. package/dist/workflow/engine.js.map +1 -0
  114. package/dist/workflow/index.d.ts +4 -0
  115. package/dist/workflow/index.d.ts.map +1 -0
  116. package/dist/workflow/index.js +4 -0
  117. package/dist/workflow/index.js.map +1 -0
  118. package/dist/workflow/templates.d.ts +4 -0
  119. package/dist/workflow/templates.d.ts.map +1 -0
  120. package/dist/workflow/templates.js +218 -0
  121. package/dist/workflow/templates.js.map +1 -0
  122. package/dist/workflow/types.d.ts +255 -0
  123. package/dist/workflow/types.d.ts.map +1 -0
  124. package/dist/workflow/types.js +48 -0
  125. package/dist/workflow/types.js.map +1 -0
  126. package/eslint.config.js +25 -0
  127. package/package.json +78 -0
  128. package/src/cli/discover.ts +223 -0
  129. package/src/cli/index.ts +40 -0
  130. package/src/connectors/base.ts +75 -0
  131. package/src/connectors/custom.ts +139 -0
  132. package/src/connectors/github.ts +195 -0
  133. package/src/connectors/google-drive.ts +217 -0
  134. package/src/connectors/index.ts +86 -0
  135. package/src/connectors/postgres.ts +148 -0
  136. package/src/connectors/slack.ts +188 -0
  137. package/src/core/auth.ts +109 -0
  138. package/src/core/registry.ts +301 -0
  139. package/src/core/tokenizer.ts +40 -0
  140. package/src/governance/audit.ts +182 -0
  141. package/src/governance/index.ts +4 -0
  142. package/src/governance/policy.ts +187 -0
  143. package/src/governance/rate-limiter.ts +95 -0
  144. package/src/governance/types.ts +100 -0
  145. package/src/identity/access-control.ts +119 -0
  146. package/src/identity/index.ts +3 -0
  147. package/src/identity/manager.ts +207 -0
  148. package/src/identity/types.ts +91 -0
  149. package/src/index.ts +16 -0
  150. package/src/registry/server.ts +195 -0
  151. package/src/types/index.ts +128 -0
  152. package/src/utils/config.ts +78 -0
  153. package/src/utils/index.ts +47 -0
  154. package/src/workflow/engine.ts +187 -0
  155. package/src/workflow/index.ts +3 -0
  156. package/src/workflow/templates.ts +220 -0
  157. package/src/workflow/types.ts +89 -0
  158. package/tsconfig.json +25 -0
@@ -0,0 +1,76 @@
1
+ export { BaseConnector } from './base.js';
2
+ export { GitHubConnector } from './github.js';
3
+ export { SlackConnector } from './slack.js';
4
+ export { PostgresConnector } from './postgres.js';
5
+ export { GoogleDriveConnector } from './google-drive.js';
6
+ export { CustomConnector } from './custom.js';
7
+ import { GitHubConnector } from './github.js';
8
+ import { SlackConnector } from './slack.js';
9
+ import { PostgresConnector } from './postgres.js';
10
+ import { GoogleDriveConnector } from './google-drive.js';
11
+ import { CustomConnector } from './custom.js';
12
+ export function createConnector(type, config) {
13
+ switch (type) {
14
+ case 'github':
15
+ return new GitHubConnector(config);
16
+ case 'slack':
17
+ return new SlackConnector(config);
18
+ case 'postgres':
19
+ return new PostgresConnector(config);
20
+ case 'google-drive':
21
+ return new GoogleDriveConnector(config);
22
+ case 'custom':
23
+ return new CustomConnector(config);
24
+ default:
25
+ throw new Error(`Unknown connector type: ${type}`);
26
+ }
27
+ }
28
+ export function createAllConnectors() {
29
+ const connectors = new Map();
30
+ connectors.set('github', new GitHubConnector({
31
+ serverId: 'github',
32
+ auth: { type: 'api-key' },
33
+ }));
34
+ connectors.set('slack', new SlackConnector({
35
+ serverId: 'slack',
36
+ auth: { type: 'api-key' },
37
+ }));
38
+ connectors.set('postgres', new PostgresConnector({
39
+ serverId: 'postgres',
40
+ auth: { type: 'none' },
41
+ }));
42
+ connectors.set('google-drive', new GoogleDriveConnector({
43
+ serverId: 'google-drive',
44
+ auth: { type: 'oauth' },
45
+ }));
46
+ connectors.set('custom', new CustomConnector({
47
+ serverId: 'custom',
48
+ auth: { type: 'none' },
49
+ }));
50
+ return connectors;
51
+ }
52
+ export function createServerFromConnector(connector) {
53
+ return {
54
+ id: connector.id,
55
+ name: connector.name,
56
+ type: connector.type,
57
+ status: 'active',
58
+ description: `MCP server for ${connector.name}`,
59
+ version: '1.0.0',
60
+ capabilities: ['read', 'write'],
61
+ tags: [connector.type, 'mcp'],
62
+ health: {
63
+ status: 'healthy',
64
+ lastChecked: new Date().toISOString(),
65
+ errorCount: 0,
66
+ },
67
+ auth: {
68
+ type: 'none',
69
+ configured: false,
70
+ },
71
+ metadata: {},
72
+ registeredAt: new Date().toISOString(),
73
+ lastSeen: new Date().toISOString(),
74
+ };
75
+ }
76
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/connectors/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { BaseConnector } from './base.js';
2
+ import { ConnectorConfig, Tool } from '../types/index.js';
3
+ export declare class PostgresConnector extends BaseConnector {
4
+ id: string;
5
+ name: string;
6
+ type: string;
7
+ private connectionUrl?;
8
+ constructor(config: ConnectorConfig);
9
+ connect(): Promise<void>;
10
+ disconnect(): Promise<void>;
11
+ healthCheck(): Promise<{
12
+ healthy: boolean;
13
+ latencyMs?: number;
14
+ }>;
15
+ refreshTools(): Promise<Tool[]>;
16
+ private buildTools;
17
+ }
18
+ //# sourceMappingURL=postgres.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/connectors/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,IAAI,EAAkB,MAAM,mBAAmB,CAAC;AA2G1E,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,EAAE,SAAc;IAChB,IAAI,SAAgB;IACpB,IAAI,SAAc;IAClB,OAAO,CAAC,aAAa,CAAC,CAAS;gBAEnB,MAAM,EAAE,eAAe;IAM7B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IASxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,WAAW,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAOhE,YAAY,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAIrC,OAAO,CAAC,UAAU;CAGnB"}
@@ -0,0 +1,140 @@
1
+ import { BaseConnector } from './base.js';
2
+ const POSTGRES_TOOL_DEFS = [
3
+ {
4
+ name: 'postgres_query',
5
+ description: 'Execute a SQL query against the PostgreSQL database',
6
+ inputSchema: {
7
+ type: 'object',
8
+ properties: {
9
+ sql: { type: 'string', description: 'SQL query to execute' },
10
+ params: { type: 'array', description: 'Query parameters' },
11
+ timeout: { type: 'number', description: 'Query timeout in milliseconds' },
12
+ },
13
+ required: ['sql'],
14
+ },
15
+ tags: ['database', 'sql', 'postgres', 'query'],
16
+ capabilities: ['read', 'write', 'query'],
17
+ authRequirements: { required: ['postgres_url'] },
18
+ contextRequirements: { minTokens: 50, maxTokens: 500 },
19
+ },
20
+ {
21
+ name: 'postgres_list_tables',
22
+ description: 'List all tables in the database schema',
23
+ inputSchema: {
24
+ type: 'object',
25
+ properties: {
26
+ schema: { type: 'string', default: 'public', description: 'Database schema name' },
27
+ },
28
+ },
29
+ tags: ['database', 'schema', 'postgres', 'tables'],
30
+ capabilities: ['read', 'metadata'],
31
+ authRequirements: { required: ['postgres_url'] },
32
+ contextRequirements: { minTokens: 30, maxTokens: 300 },
33
+ },
34
+ {
35
+ name: 'postgres_describe_table',
36
+ description: 'Get the schema/structure of a specific table',
37
+ inputSchema: {
38
+ type: 'object',
39
+ properties: {
40
+ table: { type: 'string', description: 'Table name' },
41
+ schema: { type: 'string', default: 'public', description: 'Schema name' },
42
+ },
43
+ required: ['table'],
44
+ },
45
+ tags: ['database', 'schema', 'postgres', 'structure'],
46
+ capabilities: ['read', 'metadata'],
47
+ authRequirements: { required: ['postgres_url'] },
48
+ contextRequirements: { minTokens: 30, maxTokens: 200 },
49
+ },
50
+ {
51
+ name: 'postgres_execute_transaction',
52
+ description: 'Execute multiple SQL statements as a transaction',
53
+ inputSchema: {
54
+ type: 'object',
55
+ properties: {
56
+ statements: {
57
+ type: 'array',
58
+ items: {
59
+ type: 'object',
60
+ properties: {
61
+ sql: { type: 'string' },
62
+ params: { type: 'array' },
63
+ },
64
+ },
65
+ description: 'Array of SQL statements to execute',
66
+ },
67
+ rollbackOnError: { type: 'boolean', default: true },
68
+ },
69
+ required: ['statements'],
70
+ },
71
+ tags: ['database', 'transaction', 'postgres'],
72
+ capabilities: ['write', 'transaction'],
73
+ authRequirements: { required: ['postgres_url'] },
74
+ contextRequirements: { minTokens: 50, maxTokens: 500 },
75
+ },
76
+ {
77
+ name: 'postgres_list_databases',
78
+ description: 'List all accessible databases',
79
+ inputSchema: {
80
+ type: 'object',
81
+ properties: {},
82
+ },
83
+ tags: ['database', 'postgres', 'list'],
84
+ capabilities: ['read', 'metadata'],
85
+ authRequirements: { required: ['postgres_url'] },
86
+ contextRequirements: { minTokens: 30, maxTokens: 200 },
87
+ },
88
+ {
89
+ name: 'postgres_explain_query',
90
+ description: 'Get the query execution plan without running the query',
91
+ inputSchema: {
92
+ type: 'object',
93
+ properties: {
94
+ sql: { type: 'string', description: 'SQL query to explain' },
95
+ analyze: { type: 'boolean', default: false, description: 'Run the query and show actual timings' },
96
+ verbose: { type: 'boolean', default: false },
97
+ },
98
+ required: ['sql'],
99
+ },
100
+ tags: ['database', 'postgres', 'optimization', 'explain'],
101
+ capabilities: ['read', 'analyze'],
102
+ authRequirements: { required: ['postgres_url'] },
103
+ contextRequirements: { minTokens: 50, maxTokens: 400 },
104
+ },
105
+ ];
106
+ export class PostgresConnector extends BaseConnector {
107
+ id = 'postgres';
108
+ name = 'PostgreSQL';
109
+ type = 'postgres';
110
+ connectionUrl;
111
+ constructor(config) {
112
+ super(config);
113
+ this.connectionUrl = config.auth?.credentials?.url;
114
+ this.tools = this.buildTools();
115
+ }
116
+ async connect() {
117
+ if (!this.connectionUrl) {
118
+ console.warn('PostgreSQL connection URL not configured');
119
+ this.connected = true;
120
+ return;
121
+ }
122
+ this.connected = true;
123
+ }
124
+ async disconnect() {
125
+ this.connected = false;
126
+ }
127
+ async healthCheck() {
128
+ const { result, latencyMs } = await this.measureLatency(async () => {
129
+ return this.connected && !!this.connectionUrl;
130
+ });
131
+ return { healthy: result, latencyMs };
132
+ }
133
+ async refreshTools() {
134
+ return this.tools;
135
+ }
136
+ buildTools() {
137
+ return POSTGRES_TOOL_DEFS.map(def => this.createTool(def));
138
+ }
139
+ }
140
+ //# sourceMappingURL=postgres.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/connectors/postgres.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { BaseConnector } from './base.js';
2
+ import { ConnectorConfig, Tool } from '../types/index.js';
3
+ export declare class SlackConnector extends BaseConnector {
4
+ id: string;
5
+ name: string;
6
+ type: string;
7
+ private token?;
8
+ constructor(config: ConnectorConfig);
9
+ connect(): Promise<void>;
10
+ disconnect(): Promise<void>;
11
+ healthCheck(): Promise<{
12
+ healthy: boolean;
13
+ latencyMs?: number;
14
+ }>;
15
+ refreshTools(): Promise<Tool[]>;
16
+ private buildTools;
17
+ }
18
+ //# sourceMappingURL=slack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../src/connectors/slack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,IAAI,EAAkB,MAAM,mBAAmB,CAAC;AA8I1E,qBAAa,cAAe,SAAQ,aAAa;IAC/C,EAAE,SAAW;IACb,IAAI,SAAW;IACf,IAAI,SAAW;IACf,OAAO,CAAC,KAAK,CAAC,CAAS;gBAEX,MAAM,EAAE,eAAe;IAM7B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IASxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,WAAW,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAYhE,YAAY,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAIrC,OAAO,CAAC,UAAU;CAGnB"}
@@ -0,0 +1,181 @@
1
+ import { BaseConnector } from './base.js';
2
+ const SLACK_TOOL_DEFS = [
3
+ {
4
+ name: 'slack_post_message',
5
+ description: 'Post a message to a Slack channel',
6
+ inputSchema: {
7
+ type: 'object',
8
+ properties: {
9
+ channel: { type: 'string', description: 'Channel ID or name' },
10
+ text: { type: 'string', description: 'Message text' },
11
+ blocks: { type: 'array', description: 'Slack Block Kit blocks' },
12
+ thread_ts: { type: 'string', description: 'Parent message timestamp for threads' },
13
+ },
14
+ required: ['channel', 'text'],
15
+ },
16
+ tags: ['messaging', 'slack', 'post'],
17
+ capabilities: ['write', 'messaging'],
18
+ authRequirements: { required: ['slack_bot_token'] },
19
+ contextRequirements: { minTokens: 30, maxTokens: 200 },
20
+ },
21
+ {
22
+ name: 'slack_list_channels',
23
+ description: 'List all channels in the workspace',
24
+ inputSchema: {
25
+ type: 'object',
26
+ properties: {
27
+ types: { type: 'array', items: { type: 'string' }, description: 'Channel types: public_channel, private_channel, im, mpim' },
28
+ exclude_archived: { type: 'boolean', default: true },
29
+ limit: { type: 'number', default: 100 },
30
+ },
31
+ },
32
+ tags: ['channels', 'slack', 'list'],
33
+ capabilities: ['read', 'list'],
34
+ authRequirements: { required: ['slack_bot_token'] },
35
+ contextRequirements: { minTokens: 30, maxTokens: 300 },
36
+ },
37
+ {
38
+ name: 'slack_get_messages',
39
+ description: 'Retrieve messages from a Slack channel',
40
+ inputSchema: {
41
+ type: 'object',
42
+ properties: {
43
+ channel: { type: 'string', description: 'Channel ID' },
44
+ latest: { type: 'string', description: 'Most recent message timestamp' },
45
+ oldest: { type: 'string', description: 'Oldest message timestamp' },
46
+ limit: { type: 'number', default: 100 },
47
+ inclusive: { type: 'boolean', default: false },
48
+ },
49
+ required: ['channel'],
50
+ },
51
+ tags: ['messages', 'slack', 'read'],
52
+ capabilities: ['read', 'messaging'],
53
+ authRequirements: { required: ['slack_bot_token'] },
54
+ contextRequirements: { minTokens: 30, maxTokens: 500 },
55
+ },
56
+ {
57
+ name: 'slack_create_channel',
58
+ description: 'Create a new Slack channel',
59
+ inputSchema: {
60
+ type: 'object',
61
+ properties: {
62
+ name: { type: 'string', description: 'Channel name' },
63
+ is_private: { type: 'boolean', default: false },
64
+ team_id: { type: 'string', description: 'Team to create channel in' },
65
+ },
66
+ required: ['name'],
67
+ },
68
+ tags: ['channels', 'slack', 'create'],
69
+ capabilities: ['write', 'create'],
70
+ authRequirements: { required: ['slack_bot_token'] },
71
+ contextRequirements: { minTokens: 30, maxTokens: 100 },
72
+ },
73
+ {
74
+ name: 'slack_invite_users',
75
+ description: 'Invite users to a Slack channel',
76
+ inputSchema: {
77
+ type: 'object',
78
+ properties: {
79
+ channel: { type: 'string', description: 'Channel ID' },
80
+ users: { type: 'array', items: { type: 'string' }, description: 'User IDs to invite' },
81
+ },
82
+ required: ['channel', 'users'],
83
+ },
84
+ tags: ['users', 'slack', 'invite'],
85
+ capabilities: ['write', 'admin'],
86
+ authRequirements: { required: ['slack_bot_token'] },
87
+ contextRequirements: { minTokens: 30, maxTokens: 100 },
88
+ },
89
+ {
90
+ name: 'slack_search_messages',
91
+ description: 'Search for messages across Slack',
92
+ inputSchema: {
93
+ type: 'object',
94
+ properties: {
95
+ query: { type: 'string', description: 'Search query' },
96
+ count: { type: 'number', default: 20 },
97
+ highlight: { type: 'boolean', default: true },
98
+ },
99
+ required: ['query'],
100
+ },
101
+ tags: ['search', 'slack', 'messages'],
102
+ capabilities: ['read', 'search'],
103
+ authRequirements: { required: ['slack_bot_token'] },
104
+ contextRequirements: { minTokens: 30, maxTokens: 400 },
105
+ },
106
+ {
107
+ name: 'slack_upload_file',
108
+ description: 'Upload a file to Slack',
109
+ inputSchema: {
110
+ type: 'object',
111
+ properties: {
112
+ channels: { type: 'array', items: { type: 'string' }, description: 'Channel IDs' },
113
+ file: { type: 'string', description: 'File content or URL' },
114
+ filename: { type: 'string', description: 'File name' },
115
+ title: { type: 'string', description: 'File title' },
116
+ initial_comment: { type: 'string', description: 'Initial comment' },
117
+ },
118
+ required: ['channels', 'file', 'filename'],
119
+ },
120
+ tags: ['files', 'slack', 'upload'],
121
+ capabilities: ['write', 'upload'],
122
+ authRequirements: { required: ['slack_bot_token'] },
123
+ contextRequirements: { minTokens: 30, maxTokens: 200 },
124
+ },
125
+ {
126
+ name: 'slack_get_user_info',
127
+ description: 'Get information about a Slack user',
128
+ inputSchema: {
129
+ type: 'object',
130
+ properties: {
131
+ user: { type: 'string', description: 'User ID' },
132
+ },
133
+ required: ['user'],
134
+ },
135
+ tags: ['users', 'slack', 'info'],
136
+ capabilities: ['read', 'users'],
137
+ authRequirements: { required: ['slack_bot_token'] },
138
+ contextRequirements: { minTokens: 30, maxTokens: 200 },
139
+ },
140
+ ];
141
+ export class SlackConnector extends BaseConnector {
142
+ id = 'slack';
143
+ name = 'Slack';
144
+ type = 'slack';
145
+ token;
146
+ constructor(config) {
147
+ super(config);
148
+ this.token = config.auth?.credentials?.token;
149
+ this.tools = this.buildTools();
150
+ }
151
+ async connect() {
152
+ if (!this.token) {
153
+ console.warn('Slack bot token not configured');
154
+ this.connected = true;
155
+ return;
156
+ }
157
+ this.connected = true;
158
+ }
159
+ async disconnect() {
160
+ this.connected = false;
161
+ }
162
+ async healthCheck() {
163
+ const { result, latencyMs } = await this.measureLatency(async () => {
164
+ if (!this.token)
165
+ return false;
166
+ const response = await fetch('https://slack.com/api/auth.test', {
167
+ headers: { Authorization: `Bearer ${this.token}` },
168
+ });
169
+ const data = await response.json();
170
+ return data.ok === true;
171
+ });
172
+ return { healthy: result, latencyMs };
173
+ }
174
+ async refreshTools() {
175
+ return this.tools;
176
+ }
177
+ buildTools() {
178
+ return SLACK_TOOL_DEFS.map(def => this.createTool(def));
179
+ }
180
+ }
181
+ //# sourceMappingURL=slack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack.js","sourceRoot":"","sources":["../../src/connectors/slack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { Request, Response, NextFunction } from 'express';
2
+ export interface AuthContext {
3
+ agentId: string;
4
+ permissions: string[];
5
+ context: Record<string, unknown>;
6
+ }
7
+ export interface JWTPayload {
8
+ agentId: string;
9
+ permissions: string[];
10
+ context: Record<string, unknown>;
11
+ iat: number;
12
+ exp: number;
13
+ }
14
+ export declare class AuthService {
15
+ private secret;
16
+ private apiKey?;
17
+ constructor(secret: string, apiKey?: string);
18
+ generateToken(context: AuthContext): string;
19
+ verifyToken(token: string): AuthContext | null;
20
+ verifyApiKey(key: string): boolean;
21
+ extractAuth(req: Request): AuthContext | null;
22
+ middleware(): (req: Request, res: Response, next: NextFunction) => void;
23
+ optionalAuth(): (req: Request, _res: Response, next: NextFunction) => void;
24
+ checkPermission(permission: string): (req: Request, res: Response, next: NextFunction) => void;
25
+ }
26
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAK3C,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM;IAY3C,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAa9C,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAKlC,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI;IAoB7C,UAAU,KACA,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY;IAWzD,YAAY,KACF,KAAK,OAAO,EAAE,MAAM,QAAQ,EAAE,MAAM,YAAY;IAS1D,eAAe,CAAC,UAAU,EAAE,MAAM,IACxB,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY;CAS1D"}
@@ -0,0 +1,81 @@
1
+ import jwt from 'jsonwebtoken';
2
+ export class AuthService {
3
+ secret;
4
+ apiKey;
5
+ constructor(secret, apiKey) {
6
+ this.secret = secret;
7
+ this.apiKey = apiKey;
8
+ }
9
+ generateToken(context) {
10
+ return jwt.sign({
11
+ agentId: context.agentId,
12
+ permissions: context.permissions,
13
+ context: context.context,
14
+ }, this.secret, { expiresIn: '24h' });
15
+ }
16
+ verifyToken(token) {
17
+ try {
18
+ const payload = jwt.verify(token, this.secret);
19
+ return {
20
+ agentId: payload.agentId,
21
+ permissions: payload.permissions,
22
+ context: payload.context,
23
+ };
24
+ }
25
+ catch {
26
+ return null;
27
+ }
28
+ }
29
+ verifyApiKey(key) {
30
+ if (!this.apiKey)
31
+ return false;
32
+ return key === this.apiKey;
33
+ }
34
+ extractAuth(req) {
35
+ const authHeader = req.headers.authorization;
36
+ if (authHeader?.startsWith('Bearer ')) {
37
+ const token = authHeader.slice(7);
38
+ return this.verifyToken(token);
39
+ }
40
+ const apiKey = req.headers['x-api-key'];
41
+ if (apiKey && this.verifyApiKey(apiKey)) {
42
+ return {
43
+ agentId: 'api-key-user',
44
+ permissions: ['read', 'discover'],
45
+ context: {},
46
+ };
47
+ }
48
+ return null;
49
+ }
50
+ middleware() {
51
+ return (req, res, next) => {
52
+ const auth = this.extractAuth(req);
53
+ if (!auth) {
54
+ res.status(401).json({ error: 'Unauthorized' });
55
+ return;
56
+ }
57
+ req.auth = auth;
58
+ next();
59
+ };
60
+ }
61
+ optionalAuth() {
62
+ return (req, _res, next) => {
63
+ const auth = this.extractAuth(req);
64
+ if (auth) {
65
+ req.auth = auth;
66
+ }
67
+ next();
68
+ };
69
+ }
70
+ checkPermission(permission) {
71
+ return (req, res, next) => {
72
+ const auth = req.auth;
73
+ if (!auth || !auth.permissions.includes(permission)) {
74
+ res.status(403).json({ error: 'Forbidden', required: permission });
75
+ return;
76
+ }
77
+ next();
78
+ };
79
+ }
80
+ }
81
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { Tool, Server, DiscoveryQuery, DiscoveryResult, MCPServer } from '../types/index.js';
2
+ export declare class ToolRegistry {
3
+ private tools;
4
+ private servers;
5
+ private serverInstances;
6
+ private tokenCounter;
7
+ constructor(contextBudget?: number);
8
+ registerTool(tool: Tool): void;
9
+ registerServer(server: Server): void;
10
+ registerServerInstance(instance: MCPServer): void;
11
+ removeTool(toolId: string): boolean;
12
+ removeServer(serverId: string): boolean;
13
+ getTool(toolId: string): Tool | undefined;
14
+ getServer(serverId: string): Server | undefined;
15
+ getAllTools(): Tool[];
16
+ getAllServers(): Server[];
17
+ getToolsByServer(serverId: string): Tool[];
18
+ discover(query: DiscoveryQuery): Promise<DiscoveryResult>;
19
+ private scoreAndFilterTools;
20
+ private calculateRelevance;
21
+ private getServersForTools;
22
+ private calculateContextUsed;
23
+ private findContextFitLimit;
24
+ private interpretQuery;
25
+ private generateSuggestions;
26
+ private buildSearchableText;
27
+ healthCheck(serverId: string): Promise<{
28
+ healthy: boolean;
29
+ latencyMs?: number;
30
+ }>;
31
+ refreshServer(serverId: string): Promise<void>;
32
+ }
33
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AASlG,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,YAAY,CAAe;gBAEvB,aAAa,GAAE,MAAe;IAI1C,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAU9B,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIpC,sBAAsB,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI;IAIjD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAInC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAWvC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAIzC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI/C,WAAW,IAAI,IAAI,EAAE;IAIrB,aAAa,IAAI,MAAM,EAAE;IAIzB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE;IAMpC,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAsB/D,OAAO,CAAC,mBAAmB;IAqD3B,OAAO,CAAC,kBAAkB;IA6C1B,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,cAAc;IA+BtB,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,mBAAmB;IAUrB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAQhF,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAcrD"}