@semiont/cli 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.
- package/README.md +497 -0
- package/dist/cli.mjs +45524 -0
- package/dist/dashboard/dashboard.css +238 -0
- package/dist/dashboard/dashboard.js +14 -0
- package/dist/dashboard/dashboard.js.map +7 -0
- package/dist/mcp-server/handlers-stubs.d.ts +40 -0
- package/dist/mcp-server/handlers-stubs.d.ts.map +1 -0
- package/dist/mcp-server/handlers-stubs.js +22 -0
- package/dist/mcp-server/handlers-stubs.js.map +1 -0
- package/dist/mcp-server/handlers.d.ts +96 -0
- package/dist/mcp-server/handlers.d.ts.map +1 -0
- package/dist/mcp-server/handlers.js +253 -0
- package/dist/mcp-server/handlers.js.map +1 -0
- package/dist/mcp-server/index.d.ts +3 -0
- package/dist/mcp-server/index.d.ts.map +1 -0
- package/dist/mcp-server/index.js +365 -0
- package/dist/mcp-server/index.js.map +1 -0
- package/dist/mcp-server/index.test.d.ts +7 -0
- package/dist/mcp-server/index.test.d.ts.map +1 -0
- package/dist/mcp-server/index.test.js +183 -0
- package/dist/mcp-server/index.test.js.map +1 -0
- package/dist/templates/cdk/app-stack.ts +893 -0
- package/dist/templates/cdk/app.ts +54 -0
- package/dist/templates/cdk/data-stack.ts +416 -0
- package/dist/templates/cdk.json +36 -0
- package/dist/templates/environments/ci.json +52 -0
- package/dist/templates/environments/local.json +82 -0
- package/dist/templates/environments/production.json +57 -0
- package/dist/templates/environments/staging.json +49 -0
- package/dist/templates/environments/test.json +61 -0
- package/dist/templates/inference-claude.json +14 -0
- package/dist/templates/inference-openai.json +16 -0
- package/dist/templates/package.json +23 -0
- package/dist/templates/semiont.json +31 -0
- package/dist/templates/tsconfig.json +27 -0
- package/package.json +91 -0
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool execution handlers using @semiont/api-client
|
|
3
|
+
*/
|
|
4
|
+
import { getExactText, getBodySource, resourceUri, annotationUri } from '@semiont/api-client';
|
|
5
|
+
export async function handleCreateResource(client, args) {
|
|
6
|
+
// Create File from content string for multipart/form-data upload
|
|
7
|
+
const format = args?.contentType || 'text/plain';
|
|
8
|
+
const content = args?.content || '';
|
|
9
|
+
const blob = new Blob([content], { type: format });
|
|
10
|
+
const file = new File([blob], args?.name + '.txt', { type: format });
|
|
11
|
+
const data = await client.createResource({
|
|
12
|
+
name: args?.name,
|
|
13
|
+
file: file,
|
|
14
|
+
format: format,
|
|
15
|
+
entityTypes: args?.entityTypes || [],
|
|
16
|
+
});
|
|
17
|
+
return {
|
|
18
|
+
content: [{
|
|
19
|
+
type: 'text',
|
|
20
|
+
text: `Resource created successfully:\nID: ${data.resource.id}\nName: ${data.resource.name}\nEntity Types: ${data.resource.entityTypes?.join(', ') || 'None'}`,
|
|
21
|
+
}],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export async function handleGetResource(client, id) {
|
|
25
|
+
const data = await client.getResource(resourceUri(id));
|
|
26
|
+
return {
|
|
27
|
+
content: [{
|
|
28
|
+
type: 'text',
|
|
29
|
+
text: JSON.stringify(data, null, 2),
|
|
30
|
+
}],
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export async function handleListResources(client, args) {
|
|
34
|
+
const data = await client.listResources(args?.limit, args?.archived ?? false);
|
|
35
|
+
return {
|
|
36
|
+
content: [{
|
|
37
|
+
type: 'text',
|
|
38
|
+
text: `Found ${data.total} resources:\n${data.resources.map((d) => `- ${d.name} (${d.id}) - ${d.entityTypes?.join(', ') || 'No types'}`).join('\n')}`,
|
|
39
|
+
}],
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export async function handleDetectAnnotations(client, args) {
|
|
43
|
+
const rUri = resourceUri(args?.resourceId);
|
|
44
|
+
const entityTypes = args?.entityTypes || [];
|
|
45
|
+
return new Promise((resolve) => {
|
|
46
|
+
const stream = client.sse.detectAnnotations(rUri, { entityTypes });
|
|
47
|
+
const progressMessages = [];
|
|
48
|
+
stream.onProgress((progress) => {
|
|
49
|
+
const msg = progress.status === 'scanning'
|
|
50
|
+
? `Scanning for ${progress.currentEntityType}... (${progress.processedEntityTypes}/${progress.totalEntityTypes})`
|
|
51
|
+
: `Status: ${progress.status}`;
|
|
52
|
+
progressMessages.push(msg);
|
|
53
|
+
console.error(msg); // Send to stderr for MCP progress
|
|
54
|
+
});
|
|
55
|
+
stream.onComplete((result) => {
|
|
56
|
+
resolve({
|
|
57
|
+
content: [{
|
|
58
|
+
type: 'text',
|
|
59
|
+
text: `Entity detection complete!\nFound ${result.foundCount || 0} entities\n\nProgress:\n${progressMessages.join('\n')}`,
|
|
60
|
+
}],
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
stream.onError((error) => {
|
|
64
|
+
resolve({
|
|
65
|
+
content: [{
|
|
66
|
+
type: 'text',
|
|
67
|
+
text: `Entity detection failed: ${error.message}`,
|
|
68
|
+
}],
|
|
69
|
+
isError: true,
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
export async function handleCreateAnnotation(client, args) {
|
|
75
|
+
const selectionData = args?.selectionData || {};
|
|
76
|
+
const entityTypes = args?.entityTypes || [];
|
|
77
|
+
// Convert entityTypes to W3C TextualBody items
|
|
78
|
+
const body = entityTypes.map((value) => ({
|
|
79
|
+
type: 'TextualBody',
|
|
80
|
+
value,
|
|
81
|
+
purpose: 'tagging',
|
|
82
|
+
}));
|
|
83
|
+
const rUri = resourceUri(args?.resourceId);
|
|
84
|
+
const data = await client.createAnnotation(rUri, {
|
|
85
|
+
motivation: 'highlighting',
|
|
86
|
+
target: {
|
|
87
|
+
source: args?.resourceId,
|
|
88
|
+
selector: [
|
|
89
|
+
{
|
|
90
|
+
type: 'TextPositionSelector',
|
|
91
|
+
start: selectionData.offset || 0,
|
|
92
|
+
end: (selectionData.offset || 0) + (selectionData.length || 0),
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
type: 'TextQuoteSelector',
|
|
96
|
+
exact: selectionData.text || '',
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
},
|
|
100
|
+
body,
|
|
101
|
+
});
|
|
102
|
+
// Extract text using SDK utility
|
|
103
|
+
const targetSelector = typeof data.annotation.target === 'string'
|
|
104
|
+
? undefined
|
|
105
|
+
: data.annotation.target.selector;
|
|
106
|
+
const exactText = getExactText(targetSelector);
|
|
107
|
+
return {
|
|
108
|
+
content: [{
|
|
109
|
+
type: 'text',
|
|
110
|
+
text: `Annotation created:\nID: ${data.annotation.id}\nMotivation: ${data.annotation.motivation}\nText: ${exactText}`,
|
|
111
|
+
}],
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
export async function handleSaveAnnotation(_client, _args) {
|
|
115
|
+
// NOTE: The /save endpoint was removed from the API
|
|
116
|
+
// This functionality may have been merged into the main annotation creation
|
|
117
|
+
return {
|
|
118
|
+
content: [{
|
|
119
|
+
type: 'text',
|
|
120
|
+
text: `Error: The save annotation endpoint is no longer available. Annotations are automatically persisted when created.`,
|
|
121
|
+
}],
|
|
122
|
+
isError: true,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
export async function handleResolveAnnotation(client, args) {
|
|
126
|
+
const data = await client.updateAnnotationBody(args?.selectionId, {
|
|
127
|
+
resourceId: args?.sourceResourceId,
|
|
128
|
+
operations: [{
|
|
129
|
+
op: 'add',
|
|
130
|
+
item: {
|
|
131
|
+
type: 'SpecificResource',
|
|
132
|
+
source: args?.resourceId,
|
|
133
|
+
purpose: 'linking',
|
|
134
|
+
},
|
|
135
|
+
}],
|
|
136
|
+
});
|
|
137
|
+
return {
|
|
138
|
+
content: [{
|
|
139
|
+
type: 'text',
|
|
140
|
+
text: `Annotation linked to resource:\nAnnotation ID: ${data.annotation.id}\nLinked to: ${args?.resourceId || 'null'}`,
|
|
141
|
+
}],
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
export async function handleGenerateResourceFromAnnotation(client, args) {
|
|
145
|
+
const rUri = resourceUri(args?.resourceId);
|
|
146
|
+
const aUri = annotationUri(args?.annotationId);
|
|
147
|
+
const request = {
|
|
148
|
+
title: args?.title,
|
|
149
|
+
prompt: args?.prompt,
|
|
150
|
+
language: args?.language,
|
|
151
|
+
};
|
|
152
|
+
return new Promise((resolve) => {
|
|
153
|
+
const stream = client.sse.generateResourceFromAnnotation(rUri, aUri, request);
|
|
154
|
+
const progressMessages = [];
|
|
155
|
+
stream.onProgress((progress) => {
|
|
156
|
+
const msg = `${progress.status}: ${progress.percentage}% - ${progress.message || ''}`;
|
|
157
|
+
progressMessages.push(msg);
|
|
158
|
+
console.error(msg); // Send to stderr for MCP progress
|
|
159
|
+
});
|
|
160
|
+
stream.onComplete((result) => {
|
|
161
|
+
resolve({
|
|
162
|
+
content: [{
|
|
163
|
+
type: 'text',
|
|
164
|
+
text: `Resource generation complete!\nResource ID: ${result.resourceId || 'unknown'}\nResource Name: ${result.resourceName || 'unknown'}\n\nProgress:\n${progressMessages.join('\n')}`,
|
|
165
|
+
}],
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
stream.onError((error) => {
|
|
169
|
+
resolve({
|
|
170
|
+
content: [{
|
|
171
|
+
type: 'text',
|
|
172
|
+
text: `Resource generation failed: ${error.message}`,
|
|
173
|
+
}],
|
|
174
|
+
isError: true,
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
export async function handleGetContextualSummary(_client, _args) {
|
|
180
|
+
// NOTE: /contextual-summary endpoint was removed or renamed
|
|
181
|
+
// Use /api/annotations/{id}/summary or /api/annotations/{id}/context instead
|
|
182
|
+
return {
|
|
183
|
+
content: [{
|
|
184
|
+
type: 'text',
|
|
185
|
+
text: `Error: The contextual-summary endpoint is no longer available. Use /summary or /context endpoints instead.`,
|
|
186
|
+
}],
|
|
187
|
+
isError: true,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
export async function handleGetSchemaDescription(_client) {
|
|
191
|
+
// NOTE: /schema-description endpoint was removed
|
|
192
|
+
return {
|
|
193
|
+
content: [{
|
|
194
|
+
type: 'text',
|
|
195
|
+
text: `Error: The schema-description endpoint is no longer available.`,
|
|
196
|
+
}],
|
|
197
|
+
isError: true,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
export async function handleGetLLMContext(_client, _args) {
|
|
201
|
+
// NOTE: Endpoint path may have changed - need to verify correct path
|
|
202
|
+
return {
|
|
203
|
+
content: [{
|
|
204
|
+
type: 'text',
|
|
205
|
+
text: `Error: The llm-context endpoint path needs to be updated.`,
|
|
206
|
+
}],
|
|
207
|
+
isError: true,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
export async function handleGetResourceAnnotations(_client, _args) {
|
|
211
|
+
// NOTE: Use /api/resources/{id}/annotations instead
|
|
212
|
+
return {
|
|
213
|
+
content: [{
|
|
214
|
+
type: 'text',
|
|
215
|
+
text: `Error: This endpoint needs to be updated to use /api/resources/{id}/annotations.`,
|
|
216
|
+
}],
|
|
217
|
+
isError: true,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
export async function handleGetResourceHighlights(client, args) {
|
|
221
|
+
const data = await client.getResourceAnnotations(resourceUri(args?.resourceId));
|
|
222
|
+
const highlights = data.annotations.filter(a => a.motivation === 'highlighting');
|
|
223
|
+
return {
|
|
224
|
+
content: [{
|
|
225
|
+
type: 'text',
|
|
226
|
+
text: `Found ${highlights.length} highlights in resource:\n${highlights.map(h => {
|
|
227
|
+
// Safely get exact text from TextQuoteSelector
|
|
228
|
+
const targetSelector = typeof h.target === 'string' ? undefined : h.target.selector;
|
|
229
|
+
const selectors = Array.isArray(targetSelector) ? targetSelector : [targetSelector];
|
|
230
|
+
const textQuoteSelector = selectors.find(s => s?.type === 'TextQuoteSelector');
|
|
231
|
+
const text = textQuoteSelector && 'exact' in textQuoteSelector ? textQuoteSelector.exact : h.id;
|
|
232
|
+
return `- ${text}${h.creator ? ` (creator: ${h.creator.name})` : ''}`;
|
|
233
|
+
}).join('\n')}`,
|
|
234
|
+
}],
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
export async function handleGetResourceReferences(client, args) {
|
|
238
|
+
const data = await client.getResourceAnnotations(resourceUri(args?.resourceId));
|
|
239
|
+
const references = data.annotations.filter(a => a.motivation === 'linking');
|
|
240
|
+
return {
|
|
241
|
+
content: [{
|
|
242
|
+
type: 'text',
|
|
243
|
+
text: `Found ${references.length} references in resource:\n${references.map(r => {
|
|
244
|
+
// Use SDK utilities to extract text and source
|
|
245
|
+
const targetSelector = typeof r.target === 'string' ? undefined : r.target.selector;
|
|
246
|
+
const text = getExactText(targetSelector) || r.id;
|
|
247
|
+
const source = getBodySource(r.body);
|
|
248
|
+
return `- ${text} → ${source || 'stub (no link)'}`;
|
|
249
|
+
}).join('\n')}`,
|
|
250
|
+
}],
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAoB,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEhH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAwB,EAAE,IAAS;IAC5E,iEAAiE;IACjE,MAAM,MAAM,GAAG,IAAI,EAAE,WAAW,IAAI,YAAY,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAErE,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC;QACvC,IAAI,EAAE,IAAI,EAAE,IAAI;QAChB,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,EAAE;KACrC,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,uCAAuC,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,IAAI,CAAC,QAAQ,CAAC,IAAI,mBAAmB,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE;aAC/J,CAAC;KACH,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAwB,EAAE,EAAU;IAC1E,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;IAEvD,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;aACpC,CAAC;KACH,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAAwB,EAAE,IAAS;IAC3E,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,aAAa,CACrC,IAAI,EAAE,KAAK,EACX,IAAI,EAAE,QAAQ,IAAI,KAAK,CACxB,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,SAAS,IAAI,CAAC,KAAK,gBAAgB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC3J,CAAC;KACH,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAAwB,EAAE,IAAS;IAC/E,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC;IAE5C,OAAO,IAAI,OAAO,CAAwE,CAAC,OAAO,EAAE,EAAE;QACpG,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QAEnE,MAAM,gBAAgB,GAAa,EAAE,CAAC;QAEtC,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC7B,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,KAAK,UAAU;gBACxC,CAAC,CAAC,gBAAgB,QAAQ,CAAC,iBAAiB,QAAQ,QAAQ,CAAC,oBAAoB,IAAI,QAAQ,CAAC,gBAAgB,GAAG;gBACjH,CAAC,CAAC,WAAW,QAAQ,CAAC,MAAM,EAAE,CAAC;YACjC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,kCAAkC;QACxD,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,EAAE;YAC3B,OAAO,CAAC;gBACN,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,qCAAqC,MAAM,CAAC,UAAU,IAAI,CAAC,2BAA2B,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBAC1H,CAAC;aACH,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACvB,OAAO,CAAC;gBACN,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,4BAA4B,KAAK,CAAC,OAAO,EAAE;qBAClD,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAAwB,EAAE,IAAS;IAC9E,MAAM,aAAa,GAAG,IAAI,EAAE,aAAa,IAAI,EAAE,CAAC;IAChD,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC;IAE5C,+CAA+C;IAC/C,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC;QAC/C,IAAI,EAAE,aAAsB;QAC5B,KAAK;QACL,OAAO,EAAE,SAAkB;KAC5B,CAAC,CAAC,CAAC;IAEJ,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE;QAC/C,UAAU,EAAE,cAAc;QAC1B,MAAM,EAAE;YACN,MAAM,EAAE,IAAI,EAAE,UAAU;YACxB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,sBAAsB;oBAC5B,KAAK,EAAE,aAAa,CAAC,MAAM,IAAI,CAAC;oBAChC,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,CAAC;iBAC/D;gBACD;oBACE,IAAI,EAAE,mBAAmB;oBACzB,KAAK,EAAE,aAAa,CAAC,IAAI,IAAI,EAAE;iBAChC;aACF;SACF;QACD,IAAI;KACL,CAAC,CAAC;IAEH,iCAAiC;IACjC,MAAM,cAAc,GAAG,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,QAAQ;QAC/D,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC;IACpC,MAAM,SAAS,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;IAE/C,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,4BAA4B,IAAI,CAAC,UAAU,CAAC,EAAE,iBAAiB,IAAI,CAAC,UAAU,CAAC,UAAU,WAAW,SAAS,EAAE;aACtH,CAAC;KACH,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAAyB,EAAE,KAAU;IAC9E,oDAAoD;IACpD,4EAA4E;IAC5E,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,mHAAmH;aAC1H,CAAC;QACF,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAAwB,EAAE,IAAS;IAC/E,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE,WAAW,EAAE;QAChE,UAAU,EAAE,IAAI,EAAE,gBAAgB;QAClC,UAAU,EAAE,CAAC;gBACX,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE;oBACJ,IAAI,EAAE,kBAAkB;oBACxB,MAAM,EAAE,IAAI,EAAE,UAAU;oBACxB,OAAO,EAAE,SAAS;iBACnB;aACF,CAAC;KACH,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,kDAAkD,IAAI,CAAC,UAAU,CAAC,EAAE,gBAAgB,IAAI,EAAE,UAAU,IAAI,MAAM,EAAE;aACvH,CAAC;KACH,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oCAAoC,CAAC,MAAwB,EAAE,IAAS;IAC5F,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG;QACd,KAAK,EAAE,IAAI,EAAE,KAAK;QAClB,MAAM,EAAE,IAAI,EAAE,MAAM;QACpB,QAAQ,EAAE,IAAI,EAAE,QAAQ;KACzB,CAAC;IAEF,OAAO,IAAI,OAAO,CAAwE,CAAC,OAAO,EAAE,EAAE;QACpG,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,8BAA8B,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAE9E,MAAM,gBAAgB,GAAa,EAAE,CAAC;QAEtC,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC7B,MAAM,GAAG,GAAG,GAAG,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,OAAO,QAAQ,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YACtF,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,kCAAkC;QACxD,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,EAAE;YAC3B,OAAO,CAAC;gBACN,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,+CAA+C,MAAM,CAAC,UAAU,IAAI,SAAS,oBAAoB,MAAM,CAAC,YAAY,IAAI,SAAS,kBAAkB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBACvL,CAAC;aACH,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACvB,OAAO,CAAC;gBACN,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,+BAA+B,KAAK,CAAC,OAAO,EAAE;qBACrD,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,OAAyB,EAAE,KAAU;IACpF,4DAA4D;IAC5D,6EAA6E;IAC7E,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,4GAA4G;aACnH,CAAC;QACF,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,OAAyB;IACxE,iDAAiD;IACjD,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,gEAAgE;aACvE,CAAC;QACF,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAyB,EAAE,KAAU;IAC7E,qEAAqE;IACrE,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,2DAA2D;aAClE,CAAC;QACF,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,OAAyB,EAAE,KAAU;IACtF,oDAAoD;IACpD,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,kFAAkF;aACzF,CAAC;QACF,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,MAAwB,EAAE,IAA6B;IACvG,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,WAAW,CAAC,IAAI,EAAE,UAAoB,CAAC,CAAC,CAAC;IAC1F,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,cAAc,CAAC,CAAC;IAEjF,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,SAAS,UAAU,CAAC,MAAM,6BAA6B,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;oBAC9E,+CAA+C;oBAC/C,MAAM,cAAc,GAAG,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;oBACpF,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;oBACpF,MAAM,iBAAiB,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,mBAAmB,CAAC,CAAC;oBAC/E,MAAM,IAAI,GAAG,iBAAiB,IAAI,OAAO,IAAI,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChG,OAAO,KAAK,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACxE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAChB,CAAC;KACH,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,MAAwB,EAAE,IAA6B;IACvG,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,WAAW,CAAC,IAAI,EAAE,UAAoB,CAAC,CAAC,CAAC;IAC1F,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC;IAE5E,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,SAAS,UAAU,CAAC,MAAM,6BAA6B,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;oBAC9E,+CAA+C;oBAC/C,MAAM,cAAc,GAAG,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;oBACpF,MAAM,IAAI,GAAG,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;oBAClD,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBACrC,OAAO,KAAK,IAAI,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;gBACrD,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAChB,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
3
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ListPromptsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
5
|
+
import { SemiontApiClient, baseUrl, accessToken } from '@semiont/api-client';
|
|
6
|
+
/**
|
|
7
|
+
* Semiont MCP Server
|
|
8
|
+
*
|
|
9
|
+
* This MCP server provides access to the Semiont API.
|
|
10
|
+
* It handles authentication and makes the API available to AI applications.
|
|
11
|
+
*/
|
|
12
|
+
import * as handlers from './handlers.js';
|
|
13
|
+
// Configuration from environment variables
|
|
14
|
+
if (!process.env.SEMIONT_ENV) {
|
|
15
|
+
throw new Error('SEMIONT_ENV environment variable is required');
|
|
16
|
+
}
|
|
17
|
+
if (!process.env.SEMIONT_API_URL) {
|
|
18
|
+
throw new Error('SEMIONT_API_URL environment variable is required');
|
|
19
|
+
}
|
|
20
|
+
if (!process.env.SEMIONT_ACCESS_TOKEN) {
|
|
21
|
+
throw new Error('SEMIONT_ACCESS_TOKEN environment variable is required');
|
|
22
|
+
}
|
|
23
|
+
const SEMIONT_ENV = process.env.SEMIONT_ENV;
|
|
24
|
+
const SEMIONT_API_URL = process.env.SEMIONT_API_URL;
|
|
25
|
+
const SEMIONT_ACCESS_TOKEN = process.env.SEMIONT_ACCESS_TOKEN;
|
|
26
|
+
// Create the Semiont API client
|
|
27
|
+
const apiClient = new SemiontApiClient({
|
|
28
|
+
baseUrl: baseUrl(SEMIONT_API_URL),
|
|
29
|
+
accessToken: accessToken(SEMIONT_ACCESS_TOKEN),
|
|
30
|
+
});
|
|
31
|
+
// Create the MCP server
|
|
32
|
+
const server = new Server({
|
|
33
|
+
name: 'semiont-mcp',
|
|
34
|
+
version: '0.1.0',
|
|
35
|
+
}, {
|
|
36
|
+
capabilities: {
|
|
37
|
+
tools: {},
|
|
38
|
+
resources: {},
|
|
39
|
+
prompts: {},
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
// Define all available tools
|
|
43
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
44
|
+
return {
|
|
45
|
+
tools: [
|
|
46
|
+
// Resource Management
|
|
47
|
+
{
|
|
48
|
+
name: 'semiont_create_resource',
|
|
49
|
+
description: 'Create a new resource in the knowledge graph',
|
|
50
|
+
inputSchema: {
|
|
51
|
+
type: 'object',
|
|
52
|
+
properties: {
|
|
53
|
+
name: { type: 'string', description: 'Resource name' },
|
|
54
|
+
content: { type: 'string', description: 'Resource content' },
|
|
55
|
+
entityTypes: {
|
|
56
|
+
type: 'array',
|
|
57
|
+
items: { type: 'string' },
|
|
58
|
+
description: 'Entity types (e.g., Person, Topic, Concept)'
|
|
59
|
+
},
|
|
60
|
+
contentType: { type: 'string', description: 'Content MIME type (default: text/plain)' },
|
|
61
|
+
metadata: { type: 'object', description: 'Additional metadata' },
|
|
62
|
+
},
|
|
63
|
+
required: ['name', 'content'],
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: 'semiont_get_resource',
|
|
68
|
+
description: 'Get a resource by ID with its selections',
|
|
69
|
+
inputSchema: {
|
|
70
|
+
type: 'object',
|
|
71
|
+
properties: {
|
|
72
|
+
id: { type: 'string', description: 'Resource ID' },
|
|
73
|
+
},
|
|
74
|
+
required: ['id'],
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
name: 'semiont_list_resources',
|
|
79
|
+
description: 'List and search resources',
|
|
80
|
+
inputSchema: {
|
|
81
|
+
type: 'object',
|
|
82
|
+
properties: {
|
|
83
|
+
entityTypes: { type: 'string', description: 'Comma-separated entity types to filter' },
|
|
84
|
+
search: { type: 'string', description: 'Search query' },
|
|
85
|
+
archived: { type: 'boolean', description: 'Filter by archived status (default: false - shows only non-archived resources)' },
|
|
86
|
+
limit: { type: 'number', description: 'Maximum results (default: 20)' },
|
|
87
|
+
offset: { type: 'number', description: 'Offset for pagination (default: 0)' },
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
name: 'semiont_detect_selections',
|
|
93
|
+
description: 'Detect selections (entities, references) in a resource',
|
|
94
|
+
inputSchema: {
|
|
95
|
+
type: 'object',
|
|
96
|
+
properties: {
|
|
97
|
+
resourceId: { type: 'string', description: 'Resource ID' },
|
|
98
|
+
types: {
|
|
99
|
+
type: 'array',
|
|
100
|
+
items: { type: 'string' },
|
|
101
|
+
description: 'Types to detect (default: entities, concepts)'
|
|
102
|
+
},
|
|
103
|
+
confidence: { type: 'number', description: 'Minimum confidence (0-1, default: 0.7)' },
|
|
104
|
+
},
|
|
105
|
+
required: ['resourceId'],
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
// Selection Management
|
|
109
|
+
{
|
|
110
|
+
name: 'semiont_create_selection',
|
|
111
|
+
description: 'Create a new selection in a resource',
|
|
112
|
+
inputSchema: {
|
|
113
|
+
type: 'object',
|
|
114
|
+
properties: {
|
|
115
|
+
resourceId: { type: 'string', description: 'Resource ID' },
|
|
116
|
+
selectionType: { type: 'string', description: 'Selection type (e.g., text_span)' },
|
|
117
|
+
selectionData: {
|
|
118
|
+
type: 'object',
|
|
119
|
+
description: 'Selection data (offset, length, text, etc.)',
|
|
120
|
+
properties: {
|
|
121
|
+
type: { type: 'string' },
|
|
122
|
+
offset: { type: 'number' },
|
|
123
|
+
length: { type: 'number' },
|
|
124
|
+
text: { type: 'string' },
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
entityTypes: {
|
|
128
|
+
type: 'array',
|
|
129
|
+
items: { type: 'string' },
|
|
130
|
+
description: 'Entity types for this selection'
|
|
131
|
+
},
|
|
132
|
+
provisional: { type: 'boolean', description: 'Is this provisional?' },
|
|
133
|
+
},
|
|
134
|
+
required: ['resourceId', 'selectionType', 'selectionData'],
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
name: 'semiont_save_selection',
|
|
139
|
+
description: 'Save a selection as a highlight',
|
|
140
|
+
inputSchema: {
|
|
141
|
+
type: 'object',
|
|
142
|
+
properties: {
|
|
143
|
+
selectionId: { type: 'string', description: 'Selection ID' },
|
|
144
|
+
metadata: { type: 'object', description: 'Additional metadata' },
|
|
145
|
+
},
|
|
146
|
+
required: ['selectionId'],
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
name: 'semiont_resolve_selection',
|
|
151
|
+
description: 'Link a selection to a resource (adds SpecificResource to annotation body)',
|
|
152
|
+
inputSchema: {
|
|
153
|
+
type: 'object',
|
|
154
|
+
properties: {
|
|
155
|
+
selectionId: { type: 'string', description: 'Selection ID' },
|
|
156
|
+
resourceId: { type: 'string', description: 'Target resource ID to link to' },
|
|
157
|
+
},
|
|
158
|
+
required: ['selectionId', 'resourceId'],
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
// Resource Generation from Selections
|
|
162
|
+
{
|
|
163
|
+
name: 'semiont_generate_resource_from_selection',
|
|
164
|
+
description: 'Generate a resource with AI-generated content from a selection',
|
|
165
|
+
inputSchema: {
|
|
166
|
+
type: 'object',
|
|
167
|
+
properties: {
|
|
168
|
+
selectionId: { type: 'string', description: 'Selection ID' },
|
|
169
|
+
name: { type: 'string', description: 'Resource name (optional)' },
|
|
170
|
+
entityTypes: {
|
|
171
|
+
type: 'array',
|
|
172
|
+
items: { type: 'string' },
|
|
173
|
+
description: 'Entity types for the new resource'
|
|
174
|
+
},
|
|
175
|
+
prompt: { type: 'string', description: 'AI generation prompt' },
|
|
176
|
+
},
|
|
177
|
+
required: ['selectionId'],
|
|
178
|
+
},
|
|
179
|
+
},
|
|
180
|
+
// Context and Analysis
|
|
181
|
+
{
|
|
182
|
+
name: 'semiont_get_contextual_summary',
|
|
183
|
+
description: 'Get a contextual summary for a selection',
|
|
184
|
+
inputSchema: {
|
|
185
|
+
type: 'object',
|
|
186
|
+
properties: {
|
|
187
|
+
selectionId: { type: 'string', description: 'Selection ID' },
|
|
188
|
+
includeRelated: { type: 'boolean', description: 'Include related resources' },
|
|
189
|
+
maxRelated: { type: 'number', description: 'Max related resources' },
|
|
190
|
+
},
|
|
191
|
+
required: ['selectionId'],
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
name: 'semiont_get_schema_description',
|
|
196
|
+
description: 'Get a natural language description of the graph schema',
|
|
197
|
+
inputSchema: {
|
|
198
|
+
type: 'object',
|
|
199
|
+
properties: {},
|
|
200
|
+
},
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
name: 'semiont_get_llm_context',
|
|
204
|
+
description: 'Get LLM-suitable context for a resource and optional selection',
|
|
205
|
+
inputSchema: {
|
|
206
|
+
type: 'object',
|
|
207
|
+
properties: {
|
|
208
|
+
resourceId: { type: 'string', description: 'Resource ID' },
|
|
209
|
+
selectionId: { type: 'string', description: 'Optional selection ID' },
|
|
210
|
+
includeReferences: { type: 'boolean', description: 'Include references (default: true)' },
|
|
211
|
+
includeSelections: { type: 'boolean', description: 'Include selections (default: true)' },
|
|
212
|
+
maxReferencedResources: { type: 'number', description: 'Max referenced docs (default: 5)' },
|
|
213
|
+
contextWindow: { type: 'number', description: 'Context window size (default: 1000)' },
|
|
214
|
+
},
|
|
215
|
+
required: ['resourceId'],
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
// Relationship Queries
|
|
219
|
+
{
|
|
220
|
+
name: 'semiont_get_resource_selections',
|
|
221
|
+
description: 'Get all selections in a resource',
|
|
222
|
+
inputSchema: {
|
|
223
|
+
type: 'object',
|
|
224
|
+
properties: {
|
|
225
|
+
resourceId: { type: 'string', description: 'Resource ID' },
|
|
226
|
+
},
|
|
227
|
+
required: ['resourceId'],
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
name: 'semiont_get_resource_highlights',
|
|
232
|
+
description: 'Get saved highlights in a resource',
|
|
233
|
+
inputSchema: {
|
|
234
|
+
type: 'object',
|
|
235
|
+
properties: {
|
|
236
|
+
resourceId: { type: 'string', description: 'Resource ID' },
|
|
237
|
+
},
|
|
238
|
+
required: ['resourceId'],
|
|
239
|
+
},
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
name: 'semiont_get_resource_references',
|
|
243
|
+
description: 'Get linked references in a resource',
|
|
244
|
+
inputSchema: {
|
|
245
|
+
type: 'object',
|
|
246
|
+
properties: {
|
|
247
|
+
resourceId: { type: 'string', description: 'Resource ID' },
|
|
248
|
+
},
|
|
249
|
+
required: ['resourceId'],
|
|
250
|
+
},
|
|
251
|
+
},
|
|
252
|
+
],
|
|
253
|
+
};
|
|
254
|
+
});
|
|
255
|
+
// Handle resources list (empty - we don't provide resources)
|
|
256
|
+
server.setRequestHandler(ListResourcesRequestSchema, async () => {
|
|
257
|
+
return {
|
|
258
|
+
resources: [],
|
|
259
|
+
};
|
|
260
|
+
});
|
|
261
|
+
// Handle prompts list (empty - we don't provide prompts)
|
|
262
|
+
server.setRequestHandler(ListPromptsRequestSchema, async () => {
|
|
263
|
+
return {
|
|
264
|
+
prompts: [],
|
|
265
|
+
};
|
|
266
|
+
});
|
|
267
|
+
// Handle tool execution
|
|
268
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
269
|
+
const { name, arguments: args } = request.params;
|
|
270
|
+
try {
|
|
271
|
+
switch (name) {
|
|
272
|
+
case 'semiont_create_resource':
|
|
273
|
+
return await handlers.handleCreateResource(apiClient, args);
|
|
274
|
+
case 'semiont_get_resource':
|
|
275
|
+
return await handlers.handleGetResource(apiClient, args?.id);
|
|
276
|
+
case 'semiont_list_resources':
|
|
277
|
+
return await handlers.handleListResources(apiClient, args);
|
|
278
|
+
case 'semiont_detect_selections':
|
|
279
|
+
return await handlers.handleDetectAnnotations(apiClient, args);
|
|
280
|
+
case 'semiont_create_selection':
|
|
281
|
+
return await handlers.handleCreateAnnotation(apiClient, args);
|
|
282
|
+
case 'semiont_save_selection':
|
|
283
|
+
return await handlers.handleSaveAnnotation(apiClient, args);
|
|
284
|
+
case 'semiont_resolve_selection':
|
|
285
|
+
return await handlers.handleResolveAnnotation(apiClient, args);
|
|
286
|
+
case 'semiont_generate_resource_from_selection':
|
|
287
|
+
return await handlers.handleGenerateResourceFromAnnotation(apiClient, args);
|
|
288
|
+
case 'semiont_get_contextual_summary':
|
|
289
|
+
return await handlers.handleGetContextualSummary(apiClient, args);
|
|
290
|
+
case 'semiont_get_schema_description':
|
|
291
|
+
return await handlers.handleGetSchemaDescription(apiClient);
|
|
292
|
+
case 'semiont_get_llm_context':
|
|
293
|
+
return await handlers.handleGetLLMContext(apiClient, args);
|
|
294
|
+
case 'semiont_get_resource_selections':
|
|
295
|
+
return await handlers.handleGetResourceAnnotations(apiClient, args);
|
|
296
|
+
case 'semiont_get_resource_highlights':
|
|
297
|
+
return await handlers.handleGetResourceHighlights(apiClient, args || {});
|
|
298
|
+
case 'semiont_get_resource_references':
|
|
299
|
+
return await handlers.handleGetResourceReferences(apiClient, args || {});
|
|
300
|
+
default:
|
|
301
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
catch (error) {
|
|
305
|
+
return {
|
|
306
|
+
content: [{
|
|
307
|
+
type: 'text',
|
|
308
|
+
text: `Error calling Semiont API: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
|
309
|
+
}],
|
|
310
|
+
isError: true,
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
// Start the server
|
|
315
|
+
async function main() {
|
|
316
|
+
console.error('[MCP Server] Starting up...');
|
|
317
|
+
console.error('[MCP Server] Environment:', {
|
|
318
|
+
SEMIONT_ENV,
|
|
319
|
+
SEMIONT_API_URL,
|
|
320
|
+
NODE_ENV: process.env.NODE_ENV,
|
|
321
|
+
cwd: process.cwd()
|
|
322
|
+
});
|
|
323
|
+
const transport = new StdioServerTransport();
|
|
324
|
+
console.error('[MCP Server] Connecting to transport...');
|
|
325
|
+
await server.connect(transport);
|
|
326
|
+
console.error('[MCP Server] Connected successfully');
|
|
327
|
+
// Keep the server alive until it receives a termination signal
|
|
328
|
+
process.on('SIGINT', async () => {
|
|
329
|
+
console.error('[MCP Server] Received SIGINT, shutting down...');
|
|
330
|
+
await server.close();
|
|
331
|
+
process.exit(0);
|
|
332
|
+
});
|
|
333
|
+
process.on('SIGTERM', async () => {
|
|
334
|
+
console.error('[MCP Server] Received SIGTERM, shutting down...');
|
|
335
|
+
await server.close();
|
|
336
|
+
process.exit(0);
|
|
337
|
+
});
|
|
338
|
+
// Add handler for unexpected exits
|
|
339
|
+
process.on('exit', (code) => {
|
|
340
|
+
console.error(`[MCP Server] Process exiting with code ${code}`);
|
|
341
|
+
});
|
|
342
|
+
process.on('uncaughtException', (error) => {
|
|
343
|
+
console.error('[MCP Server] Uncaught exception:', error);
|
|
344
|
+
process.exit(1);
|
|
345
|
+
});
|
|
346
|
+
process.on('unhandledRejection', (reason, promise) => {
|
|
347
|
+
console.error('[MCP Server] Unhandled rejection at:', promise, 'reason:', reason);
|
|
348
|
+
process.exit(1);
|
|
349
|
+
});
|
|
350
|
+
console.error('[MCP Server] Setting up keep-alive...');
|
|
351
|
+
// Keep the process alive
|
|
352
|
+
// The server will handle incoming messages via the transport
|
|
353
|
+
await new Promise(() => {
|
|
354
|
+
console.error('[MCP Server] Keep-alive promise created, server should stay running...');
|
|
355
|
+
// Log periodic heartbeat to show we're still alive
|
|
356
|
+
setInterval(() => {
|
|
357
|
+
console.error(`[MCP Server] Still alive at ${new Date().toISOString()}`);
|
|
358
|
+
}, 30000); // Every 30 seconds
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
main().catch((error) => {
|
|
362
|
+
console.error('[MCP Server] Fatal error in main:', error);
|
|
363
|
+
process.exit(1);
|
|
364
|
+
});
|
|
365
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|