modular-studio 0.2.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/LICENSE +21 -0
- package/README.md +261 -0
- package/dist/assets/graphPopulator-C6jg83nL.js +1 -0
- package/dist/assets/index-CXhIX28x.js +634 -0
- package/dist/assets/index-CeNF0r-K.css +1 -0
- package/dist/assets/jszip.min-BlpRodxc.js +2 -0
- package/dist/index.html +16 -0
- package/dist/vite.svg +1 -0
- package/dist-server/bin/modular-mcp.d.ts +8 -0
- package/dist-server/bin/modular-mcp.d.ts.map +1 -0
- package/dist-server/bin/modular-mcp.js +158 -0
- package/dist-server/bin/modular-mcp.js.map +1 -0
- package/dist-server/bin/modular-studio.d.ts +3 -0
- package/dist-server/bin/modular-studio.d.ts.map +1 -0
- package/dist-server/bin/modular-studio.js +63 -0
- package/dist-server/bin/modular-studio.js.map +1 -0
- package/dist-server/server/config.d.ts +4 -0
- package/dist-server/server/config.d.ts.map +1 -0
- package/dist-server/server/config.js +33 -0
- package/dist-server/server/config.js.map +1 -0
- package/dist-server/server/data/mcp-clients.json +5 -0
- package/dist-server/server/index.d.ts +3 -0
- package/dist-server/server/index.d.ts.map +1 -0
- package/dist-server/server/index.js +174 -0
- package/dist-server/server/index.js.map +1 -0
- package/dist-server/server/mcp/manager.d.ts +47 -0
- package/dist-server/server/mcp/manager.d.ts.map +1 -0
- package/dist-server/server/mcp/manager.js +203 -0
- package/dist-server/server/mcp/manager.js.map +1 -0
- package/dist-server/server/mcp/modular-server.d.ts +55 -0
- package/dist-server/server/mcp/modular-server.d.ts.map +1 -0
- package/dist-server/server/mcp/modular-server.js +492 -0
- package/dist-server/server/mcp/modular-server.js.map +1 -0
- package/dist-server/server/mcp/transport.d.ts +29 -0
- package/dist-server/server/mcp/transport.d.ts.map +1 -0
- package/dist-server/server/mcp/transport.js +61 -0
- package/dist-server/server/mcp/transport.js.map +1 -0
- package/dist-server/server/routes/agent-sdk.d.ts +3 -0
- package/dist-server/server/routes/agent-sdk.d.ts.map +1 -0
- package/dist-server/server/routes/agent-sdk.js +99 -0
- package/dist-server/server/routes/agent-sdk.js.map +1 -0
- package/dist-server/server/routes/agents.d.ts +10 -0
- package/dist-server/server/routes/agents.d.ts.map +1 -0
- package/dist-server/server/routes/agents.js +61 -0
- package/dist-server/server/routes/agents.js.map +1 -0
- package/dist-server/server/routes/auth-codex.d.ts +3 -0
- package/dist-server/server/routes/auth-codex.d.ts.map +1 -0
- package/dist-server/server/routes/auth-codex.js +51 -0
- package/dist-server/server/routes/auth-codex.js.map +1 -0
- package/dist-server/server/routes/capabilities.d.ts +3 -0
- package/dist-server/server/routes/capabilities.d.ts.map +1 -0
- package/dist-server/server/routes/capabilities.js +32 -0
- package/dist-server/server/routes/capabilities.js.map +1 -0
- package/dist-server/server/routes/claude-config.d.ts +3 -0
- package/dist-server/server/routes/claude-config.d.ts.map +1 -0
- package/dist-server/server/routes/claude-config.js +146 -0
- package/dist-server/server/routes/claude-config.js.map +1 -0
- package/dist-server/server/routes/connectors.d.ts +12 -0
- package/dist-server/server/routes/connectors.d.ts.map +1 -0
- package/dist-server/server/routes/connectors.js +325 -0
- package/dist-server/server/routes/connectors.js.map +1 -0
- package/dist-server/server/routes/embeddings.d.ts +6 -0
- package/dist-server/server/routes/embeddings.d.ts.map +1 -0
- package/dist-server/server/routes/embeddings.js +130 -0
- package/dist-server/server/routes/embeddings.js.map +1 -0
- package/dist-server/server/routes/health.d.ts +9 -0
- package/dist-server/server/routes/health.d.ts.map +1 -0
- package/dist-server/server/routes/health.js +284 -0
- package/dist-server/server/routes/health.js.map +1 -0
- package/dist-server/server/routes/knowledge.d.ts +3 -0
- package/dist-server/server/routes/knowledge.d.ts.map +1 -0
- package/dist-server/server/routes/knowledge.js +534 -0
- package/dist-server/server/routes/knowledge.js.map +1 -0
- package/dist-server/server/routes/llm.d.ts +3 -0
- package/dist-server/server/routes/llm.d.ts.map +1 -0
- package/dist-server/server/routes/llm.js +200 -0
- package/dist-server/server/routes/llm.js.map +1 -0
- package/dist-server/server/routes/mcp-oauth.d.ts +12 -0
- package/dist-server/server/routes/mcp-oauth.d.ts.map +1 -0
- package/dist-server/server/routes/mcp-oauth.js +137 -0
- package/dist-server/server/routes/mcp-oauth.js.map +1 -0
- package/dist-server/server/routes/mcp.d.ts +3 -0
- package/dist-server/server/routes/mcp.d.ts.map +1 -0
- package/dist-server/server/routes/mcp.js +177 -0
- package/dist-server/server/routes/mcp.js.map +1 -0
- package/dist-server/server/routes/pipeline.d.ts +45 -0
- package/dist-server/server/routes/pipeline.d.ts.map +1 -0
- package/dist-server/server/routes/pipeline.js +483 -0
- package/dist-server/server/routes/pipeline.js.map +1 -0
- package/dist-server/server/routes/providers.d.ts +3 -0
- package/dist-server/server/routes/providers.d.ts.map +1 -0
- package/dist-server/server/routes/providers.js +204 -0
- package/dist-server/server/routes/providers.js.map +1 -0
- package/dist-server/server/routes/qualification.d.ts +3 -0
- package/dist-server/server/routes/qualification.d.ts.map +1 -0
- package/dist-server/server/routes/qualification.js +105 -0
- package/dist-server/server/routes/qualification.js.map +1 -0
- package/dist-server/server/routes/repo-index.d.ts +4 -0
- package/dist-server/server/routes/repo-index.d.ts.map +1 -0
- package/dist-server/server/routes/repo-index.js +318 -0
- package/dist-server/server/routes/repo-index.js.map +1 -0
- package/dist-server/server/routes/runtime.d.ts +3 -0
- package/dist-server/server/routes/runtime.d.ts.map +1 -0
- package/dist-server/server/routes/runtime.js +122 -0
- package/dist-server/server/routes/runtime.js.map +1 -0
- package/dist-server/server/routes/skills-search.d.ts +3 -0
- package/dist-server/server/routes/skills-search.d.ts.map +1 -0
- package/dist-server/server/routes/skills-search.js +198 -0
- package/dist-server/server/routes/skills-search.js.map +1 -0
- package/dist-server/server/routes/worktrees.d.ts +3 -0
- package/dist-server/server/routes/worktrees.d.ts.map +1 -0
- package/dist-server/server/routes/worktrees.js +70 -0
- package/dist-server/server/routes/worktrees.js.map +1 -0
- package/dist-server/server/services/__tests__/embeddingService.test.d.ts +5 -0
- package/dist-server/server/services/__tests__/embeddingService.test.d.ts.map +1 -0
- package/dist-server/server/services/__tests__/embeddingService.test.js +233 -0
- package/dist-server/server/services/__tests__/embeddingService.test.js.map +1 -0
- package/dist-server/server/services/agentRunner.d.ts +46 -0
- package/dist-server/server/services/agentRunner.d.ts.map +1 -0
- package/dist-server/server/services/agentRunner.js +295 -0
- package/dist-server/server/services/agentRunner.js.map +1 -0
- package/dist-server/server/services/agentStore.d.ts +40 -0
- package/dist-server/server/services/agentStore.d.ts.map +1 -0
- package/dist-server/server/services/agentStore.js +62 -0
- package/dist-server/server/services/agentStore.js.map +1 -0
- package/dist-server/server/services/contentStore.d.ts +32 -0
- package/dist-server/server/services/contentStore.d.ts.map +1 -0
- package/dist-server/server/services/contentStore.js +68 -0
- package/dist-server/server/services/contentStore.js.map +1 -0
- package/dist-server/server/services/embeddingService.d.ts +53 -0
- package/dist-server/server/services/embeddingService.d.ts.map +1 -0
- package/dist-server/server/services/embeddingService.js +199 -0
- package/dist-server/server/services/embeddingService.js.map +1 -0
- package/dist-server/server/services/factExtractor.d.ts +14 -0
- package/dist-server/server/services/factExtractor.d.ts.map +1 -0
- package/dist-server/server/services/factExtractor.js +126 -0
- package/dist-server/server/services/factExtractor.js.map +1 -0
- package/dist-server/server/services/githubIndexer.d.ts +59 -0
- package/dist-server/server/services/githubIndexer.d.ts.map +1 -0
- package/dist-server/server/services/githubIndexer.js +183 -0
- package/dist-server/server/services/githubIndexer.js.map +1 -0
- package/dist-server/server/services/mcpOAuth.d.ts +32 -0
- package/dist-server/server/services/mcpOAuth.d.ts.map +1 -0
- package/dist-server/server/services/mcpOAuth.js +264 -0
- package/dist-server/server/services/mcpOAuth.js.map +1 -0
- package/dist-server/server/services/memoryScorer.d.ts +19 -0
- package/dist-server/server/services/memoryScorer.d.ts.map +1 -0
- package/dist-server/server/services/memoryScorer.js +147 -0
- package/dist-server/server/services/memoryScorer.js.map +1 -0
- package/dist-server/server/services/repoIndexer.d.ts +91 -0
- package/dist-server/server/services/repoIndexer.d.ts.map +1 -0
- package/dist-server/server/services/repoIndexer.js +512 -0
- package/dist-server/server/services/repoIndexer.js.map +1 -0
- package/dist-server/server/services/teamRunner.d.ts +39 -0
- package/dist-server/server/services/teamRunner.d.ts.map +1 -0
- package/dist-server/server/services/teamRunner.js +76 -0
- package/dist-server/server/services/teamRunner.js.map +1 -0
- package/dist-server/server/services/worktreeManager.d.ts +27 -0
- package/dist-server/server/services/worktreeManager.d.ts.map +1 -0
- package/dist-server/server/services/worktreeManager.js +107 -0
- package/dist-server/server/services/worktreeManager.js.map +1 -0
- package/dist-server/server/types.d.ts +30 -0
- package/dist-server/server/types.d.ts.map +1 -0
- package/dist-server/server/types.js +2 -0
- package/dist-server/server/types.js.map +1 -0
- package/dist-server/server/utils/pathSecurity.d.ts +34 -0
- package/dist-server/server/utils/pathSecurity.d.ts.map +1 -0
- package/dist-server/server/utils/pathSecurity.js +78 -0
- package/dist-server/server/utils/pathSecurity.js.map +1 -0
- package/dist-server/src/services/budgetAllocator.d.ts +37 -0
- package/dist-server/src/services/budgetAllocator.d.ts.map +1 -0
- package/dist-server/src/services/budgetAllocator.js +120 -0
- package/dist-server/src/services/budgetAllocator.js.map +1 -0
- package/dist-server/src/services/contradictionDetector.d.ts +18 -0
- package/dist-server/src/services/contradictionDetector.d.ts.map +1 -0
- package/dist-server/src/services/contradictionDetector.js +111 -0
- package/dist-server/src/services/contradictionDetector.js.map +1 -0
- package/dist-server/src/services/treeIndexer.d.ts +91 -0
- package/dist-server/src/services/treeIndexer.d.ts.map +1 -0
- package/dist-server/src/services/treeIndexer.js +289 -0
- package/dist-server/src/services/treeIndexer.js.map +1 -0
- package/dist-server/src/store/knowledgeBase.d.ts +130 -0
- package/dist-server/src/store/knowledgeBase.d.ts.map +1 -0
- package/dist-server/src/store/knowledgeBase.js +299 -0
- package/dist-server/src/store/knowledgeBase.js.map +1 -0
- package/dist-server/tsconfig.server.tsbuildinfo +1 -0
- package/package.json +92 -0
|
@@ -0,0 +1,492 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Modular MCP Server - Universal Context Provider
|
|
3
|
+
*
|
|
4
|
+
* Exposes Modular Studio's context engineering pipeline as MCP tools:
|
|
5
|
+
* - modular_context: Full context engineering pipeline
|
|
6
|
+
* - modular_tree: Document tree indexing
|
|
7
|
+
* - modular_classify: Knowledge type classification
|
|
8
|
+
* - modular_facts: Fact extraction from text
|
|
9
|
+
* - modular_consolidate: Memory consolidation
|
|
10
|
+
*/
|
|
11
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
12
|
+
import { CallToolRequestSchema, ErrorCode, ListToolsRequestSchema, McpError, } from '@modelcontextprotocol/sdk/types.js';
|
|
13
|
+
import * as fs from 'fs/promises';
|
|
14
|
+
// Import pipeline services
|
|
15
|
+
import { indexMarkdown } from '../../src/services/treeIndexer.js';
|
|
16
|
+
import { classifyKnowledge, KNOWLEDGE_TYPES } from '../../src/store/knowledgeBase.js';
|
|
17
|
+
import { allocateBudgets } from '../../src/services/budgetAllocator.js';
|
|
18
|
+
import { resolveContradictions } from '../../src/services/contradictionDetector.js';
|
|
19
|
+
import { extractFacts } from '../services/factExtractor.js';
|
|
20
|
+
import { rankFacts } from '../services/memoryScorer.js';
|
|
21
|
+
import { validateFilePath, validateFilePaths } from '../utils/pathSecurity.js';
|
|
22
|
+
/**
|
|
23
|
+
* Core context engineering pipeline
|
|
24
|
+
*/
|
|
25
|
+
export async function processModularContext(input) {
|
|
26
|
+
const { sources, task, tokenBudget = 32000 } = input;
|
|
27
|
+
// Step 1: Index all sources
|
|
28
|
+
const indexedSources = [];
|
|
29
|
+
// SECURITY: Validate all source paths first
|
|
30
|
+
try {
|
|
31
|
+
validateFilePaths(sources.map(s => s.path));
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
throw new McpError(ErrorCode.InvalidRequest, `Path validation failed: ${error}`);
|
|
35
|
+
}
|
|
36
|
+
for (const source of sources) {
|
|
37
|
+
try {
|
|
38
|
+
const content = await fs.readFile(source.path, 'utf-8');
|
|
39
|
+
// Index the content
|
|
40
|
+
const tree = indexMarkdown(source.path, content);
|
|
41
|
+
// Classify if type not provided
|
|
42
|
+
const classification = source.type
|
|
43
|
+
? { knowledgeType: source.type, depth: 0, confidence: 'high', reason: 'Provided explicitly' }
|
|
44
|
+
: classifyKnowledge(source.path, content);
|
|
45
|
+
indexedSources.push({
|
|
46
|
+
name: source.name,
|
|
47
|
+
path: source.path,
|
|
48
|
+
tree,
|
|
49
|
+
classification,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
throw new McpError(ErrorCode.InvalidRequest, `Failed to process source ${source.name}: ${error}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Step 2: Budget allocation
|
|
57
|
+
const budgetSources = indexedSources.map(source => ({
|
|
58
|
+
name: source.name,
|
|
59
|
+
knowledgeType: source.classification.knowledgeType,
|
|
60
|
+
rawTokens: source.tree.totalTokens,
|
|
61
|
+
depthMultiplier: source.classification.depth === 0 ? 1.5 : 1.0,
|
|
62
|
+
}));
|
|
63
|
+
const budgetAllocation = allocateBudgets(budgetSources, tokenBudget);
|
|
64
|
+
// Step 3: Assemble context with depth filtering
|
|
65
|
+
const knowledgeBlocks = [];
|
|
66
|
+
for (const source of indexedSources) {
|
|
67
|
+
const allocation = budgetAllocation.find(a => a.name === source.name);
|
|
68
|
+
if (!allocation || allocation.allocatedTokens === 0)
|
|
69
|
+
continue;
|
|
70
|
+
// Extract content based on allocated tokens
|
|
71
|
+
const content = extractContentFromTree(source.tree.root, allocation.allocatedTokens);
|
|
72
|
+
if (content.trim()) {
|
|
73
|
+
knowledgeBlocks.push({
|
|
74
|
+
name: source.name,
|
|
75
|
+
type: source.classification.knowledgeType,
|
|
76
|
+
content: content,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Step 4: Detect and resolve contradictions
|
|
81
|
+
const contradictionResult = resolveContradictions(knowledgeBlocks.map(block => ({
|
|
82
|
+
name: block.name,
|
|
83
|
+
type: block.type,
|
|
84
|
+
content: block.content,
|
|
85
|
+
})));
|
|
86
|
+
// Step 5: Assemble final context with attention ordering
|
|
87
|
+
const contextParts = [];
|
|
88
|
+
// Add task framing
|
|
89
|
+
contextParts.push(`<task>${task}</task>`);
|
|
90
|
+
// Add knowledge sources in epistemic priority order
|
|
91
|
+
const typeOrder = ['ground-truth', 'guideline', 'framework', 'evidence', 'signal', 'hypothesis'];
|
|
92
|
+
for (const type of typeOrder) {
|
|
93
|
+
const typeBlocks = knowledgeBlocks.filter(b => b.type === type);
|
|
94
|
+
if (typeBlocks.length === 0)
|
|
95
|
+
continue;
|
|
96
|
+
const typeInfo = KNOWLEDGE_TYPES[type];
|
|
97
|
+
contextParts.push(`[${typeInfo.label.toUpperCase()}] ${typeInfo.instruction}`);
|
|
98
|
+
for (const block of typeBlocks) {
|
|
99
|
+
const allocation = budgetAllocation.find(a => a.name === block.name);
|
|
100
|
+
contextParts.push(`<source name="${block.name}" type="${typeInfo.label}" tokens="${allocation?.allocatedTokens || 0}">\n${block.content}\n</source>`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Add contradiction annotations if any
|
|
104
|
+
if (contradictionResult.annotations.length > 0) {
|
|
105
|
+
contextParts.push('<contradictions>\n' + contradictionResult.annotations.join('\n') + '\n</contradictions>');
|
|
106
|
+
}
|
|
107
|
+
const finalContext = contextParts.join('\n\n');
|
|
108
|
+
return {
|
|
109
|
+
context: finalContext,
|
|
110
|
+
metadata: {
|
|
111
|
+
totalTokens: budgetAllocation.reduce((sum, a) => sum + a.allocatedTokens, 0),
|
|
112
|
+
sources: indexedSources.map(source => {
|
|
113
|
+
const allocation = budgetAllocation.find(a => a.name === source.name);
|
|
114
|
+
return {
|
|
115
|
+
name: source.name,
|
|
116
|
+
type: source.classification.knowledgeType,
|
|
117
|
+
tokens: allocation?.allocatedTokens || 0,
|
|
118
|
+
depth: source.classification.depth,
|
|
119
|
+
};
|
|
120
|
+
}),
|
|
121
|
+
budgetAllocation,
|
|
122
|
+
contradictions: contradictionResult.contradictionsFound,
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Extract content from tree node respecting token budget
|
|
128
|
+
*/
|
|
129
|
+
function extractContentFromTree(node, tokenBudget) {
|
|
130
|
+
if (tokenBudget <= 0)
|
|
131
|
+
return '';
|
|
132
|
+
let content = '';
|
|
133
|
+
let usedTokens = 0;
|
|
134
|
+
// Add node title if it's not the root
|
|
135
|
+
if (node.depth > 0) {
|
|
136
|
+
const titleTokens = Math.ceil(node.title.length / 4);
|
|
137
|
+
if (usedTokens + titleTokens <= tokenBudget) {
|
|
138
|
+
content += '#'.repeat(node.depth) + ' ' + node.title + '\n\n';
|
|
139
|
+
usedTokens += titleTokens;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Add node text
|
|
143
|
+
if (node.text && usedTokens < tokenBudget) {
|
|
144
|
+
const remainingBudget = tokenBudget - usedTokens;
|
|
145
|
+
const textTokens = Math.ceil(node.text.length / 4);
|
|
146
|
+
if (textTokens <= remainingBudget) {
|
|
147
|
+
content += node.text + '\n\n';
|
|
148
|
+
usedTokens += textTokens;
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
// Truncate text to fit budget
|
|
152
|
+
const charBudget = remainingBudget * 4;
|
|
153
|
+
content += node.text.slice(0, charBudget) + '...\n\n';
|
|
154
|
+
usedTokens = tokenBudget;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// Add children if budget allows
|
|
158
|
+
for (const child of node.children) {
|
|
159
|
+
if (usedTokens >= tokenBudget)
|
|
160
|
+
break;
|
|
161
|
+
const childContent = extractContentFromTree(child, tokenBudget - usedTokens);
|
|
162
|
+
if (childContent.trim()) {
|
|
163
|
+
content += childContent;
|
|
164
|
+
usedTokens += Math.ceil(childContent.length / 4);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return content;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Create and configure the MCP server
|
|
171
|
+
*/
|
|
172
|
+
export function createModularServer() {
|
|
173
|
+
const server = new Server({
|
|
174
|
+
name: 'modular-mcp-server',
|
|
175
|
+
version: '0.1.0',
|
|
176
|
+
}, {
|
|
177
|
+
capabilities: {
|
|
178
|
+
tools: {},
|
|
179
|
+
},
|
|
180
|
+
});
|
|
181
|
+
// List available tools
|
|
182
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
183
|
+
return {
|
|
184
|
+
tools: [
|
|
185
|
+
{
|
|
186
|
+
name: 'modular_context',
|
|
187
|
+
description: 'Process sources through the full context engineering pipeline with epistemic weighting, budget allocation, and attention ordering',
|
|
188
|
+
inputSchema: {
|
|
189
|
+
type: 'object',
|
|
190
|
+
properties: {
|
|
191
|
+
sources: {
|
|
192
|
+
type: 'array',
|
|
193
|
+
description: 'Array of source files to process',
|
|
194
|
+
items: {
|
|
195
|
+
type: 'object',
|
|
196
|
+
properties: {
|
|
197
|
+
path: { type: 'string', description: 'File path to source' },
|
|
198
|
+
name: { type: 'string', description: 'Human-readable name' },
|
|
199
|
+
type: {
|
|
200
|
+
type: 'string',
|
|
201
|
+
enum: ['ground-truth', 'signal', 'evidence', 'framework', 'hypothesis', 'guideline'],
|
|
202
|
+
description: 'Knowledge type (optional, will auto-classify if not provided)'
|
|
203
|
+
},
|
|
204
|
+
},
|
|
205
|
+
required: ['path', 'name'],
|
|
206
|
+
},
|
|
207
|
+
},
|
|
208
|
+
task: {
|
|
209
|
+
type: 'string',
|
|
210
|
+
description: 'The task or question this context will help answer',
|
|
211
|
+
},
|
|
212
|
+
tokenBudget: {
|
|
213
|
+
type: 'number',
|
|
214
|
+
description: 'Maximum tokens to allocate (default: 32000)',
|
|
215
|
+
},
|
|
216
|
+
},
|
|
217
|
+
required: ['sources', 'task'],
|
|
218
|
+
},
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
name: 'modular_tree',
|
|
222
|
+
description: 'Index a document into tree structure and return tree with headline summary',
|
|
223
|
+
inputSchema: {
|
|
224
|
+
type: 'object',
|
|
225
|
+
properties: {
|
|
226
|
+
path: {
|
|
227
|
+
type: 'string',
|
|
228
|
+
description: 'Path to the file to index',
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
required: ['path'],
|
|
232
|
+
},
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
name: 'modular_classify',
|
|
236
|
+
description: 'Auto-classify a document or content by knowledge type with suggested depth and budget weight',
|
|
237
|
+
inputSchema: {
|
|
238
|
+
type: 'object',
|
|
239
|
+
properties: {
|
|
240
|
+
path: {
|
|
241
|
+
type: 'string',
|
|
242
|
+
description: 'File path (optional if content provided)',
|
|
243
|
+
},
|
|
244
|
+
content: {
|
|
245
|
+
type: 'string',
|
|
246
|
+
description: 'Text content to classify (optional if path provided)',
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
},
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
name: 'modular_facts',
|
|
253
|
+
description: 'Extract structured facts from text using epistemic classification',
|
|
254
|
+
inputSchema: {
|
|
255
|
+
type: 'object',
|
|
256
|
+
properties: {
|
|
257
|
+
text: {
|
|
258
|
+
type: 'string',
|
|
259
|
+
description: 'Text to extract facts from',
|
|
260
|
+
},
|
|
261
|
+
agentId: {
|
|
262
|
+
type: 'string',
|
|
263
|
+
description: 'Agent identifier for fact attribution (optional)',
|
|
264
|
+
},
|
|
265
|
+
},
|
|
266
|
+
required: ['text'],
|
|
267
|
+
},
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
name: 'modular_consolidate',
|
|
271
|
+
description: 'Consolidate memory facts using ranking, deduplication, and promotion',
|
|
272
|
+
inputSchema: {
|
|
273
|
+
type: 'object',
|
|
274
|
+
properties: {
|
|
275
|
+
facts: {
|
|
276
|
+
type: 'array',
|
|
277
|
+
description: 'Array of facts to consolidate',
|
|
278
|
+
items: {
|
|
279
|
+
type: 'object',
|
|
280
|
+
properties: {
|
|
281
|
+
key: { type: 'string' },
|
|
282
|
+
value: { type: 'string' },
|
|
283
|
+
epistemicType: {
|
|
284
|
+
type: 'string',
|
|
285
|
+
enum: ['observation', 'inference', 'decision', 'hypothesis', 'contract'],
|
|
286
|
+
},
|
|
287
|
+
confidence: { type: 'number' },
|
|
288
|
+
source: { type: 'string' },
|
|
289
|
+
importance: { type: 'number' },
|
|
290
|
+
created_at: { type: 'number' },
|
|
291
|
+
accessed_at: { type: 'number' },
|
|
292
|
+
access_count: { type: 'number' },
|
|
293
|
+
},
|
|
294
|
+
required: ['key', 'value', 'epistemicType', 'confidence', 'source'],
|
|
295
|
+
},
|
|
296
|
+
},
|
|
297
|
+
},
|
|
298
|
+
required: ['facts'],
|
|
299
|
+
},
|
|
300
|
+
},
|
|
301
|
+
],
|
|
302
|
+
};
|
|
303
|
+
});
|
|
304
|
+
// Handle tool calls
|
|
305
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
306
|
+
const { name, arguments: args } = request.params;
|
|
307
|
+
try {
|
|
308
|
+
switch (name) {
|
|
309
|
+
case 'modular_context': {
|
|
310
|
+
const input = args;
|
|
311
|
+
const result = await processModularContext(input);
|
|
312
|
+
return {
|
|
313
|
+
content: [
|
|
314
|
+
{
|
|
315
|
+
type: 'text',
|
|
316
|
+
text: JSON.stringify(result, null, 2),
|
|
317
|
+
},
|
|
318
|
+
],
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
case 'modular_tree': {
|
|
322
|
+
const { path: filePath } = args;
|
|
323
|
+
if (!filePath) {
|
|
324
|
+
throw new McpError(ErrorCode.InvalidParams, 'path is required');
|
|
325
|
+
}
|
|
326
|
+
// SECURITY: Validate file path
|
|
327
|
+
try {
|
|
328
|
+
validateFilePath(filePath);
|
|
329
|
+
}
|
|
330
|
+
catch (error) {
|
|
331
|
+
throw new McpError(ErrorCode.InvalidRequest, `${error}`);
|
|
332
|
+
}
|
|
333
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
334
|
+
const tree = indexMarkdown(filePath, content);
|
|
335
|
+
// Generate headlines summary
|
|
336
|
+
const headlines = extractHeadlines(tree.root);
|
|
337
|
+
return {
|
|
338
|
+
content: [
|
|
339
|
+
{
|
|
340
|
+
type: 'text',
|
|
341
|
+
text: JSON.stringify({
|
|
342
|
+
tree,
|
|
343
|
+
headlines: headlines.join('\n'),
|
|
344
|
+
}, null, 2),
|
|
345
|
+
},
|
|
346
|
+
],
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
case 'modular_classify': {
|
|
350
|
+
const { path: filePath, content } = args;
|
|
351
|
+
if (!filePath && !content) {
|
|
352
|
+
throw new McpError(ErrorCode.InvalidParams, 'Either path or content is required');
|
|
353
|
+
}
|
|
354
|
+
let textContent = content;
|
|
355
|
+
if (!textContent && filePath) {
|
|
356
|
+
// SECURITY: Validate file path
|
|
357
|
+
try {
|
|
358
|
+
validateFilePath(filePath);
|
|
359
|
+
}
|
|
360
|
+
catch (error) {
|
|
361
|
+
throw new McpError(ErrorCode.InvalidRequest, `${error}`);
|
|
362
|
+
}
|
|
363
|
+
textContent = await fs.readFile(filePath, 'utf-8');
|
|
364
|
+
}
|
|
365
|
+
const classification = classifyKnowledge(filePath || 'content', textContent || '');
|
|
366
|
+
const typeInfo = KNOWLEDGE_TYPES[classification.knowledgeType];
|
|
367
|
+
return {
|
|
368
|
+
content: [
|
|
369
|
+
{
|
|
370
|
+
type: 'text',
|
|
371
|
+
text: JSON.stringify({
|
|
372
|
+
knowledgeType: classification.knowledgeType,
|
|
373
|
+
suggestedDepth: classification.depth,
|
|
374
|
+
budgetWeight: getBudgetWeight(classification.knowledgeType),
|
|
375
|
+
confidence: classification.confidence,
|
|
376
|
+
reason: classification.reason,
|
|
377
|
+
instruction: typeInfo.instruction,
|
|
378
|
+
}, null, 2),
|
|
379
|
+
},
|
|
380
|
+
],
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
case 'modular_facts': {
|
|
384
|
+
const { text, agentId = 'mcp-client' } = args;
|
|
385
|
+
if (!text) {
|
|
386
|
+
throw new McpError(ErrorCode.InvalidParams, 'text is required');
|
|
387
|
+
}
|
|
388
|
+
const facts = extractFacts(text, agentId);
|
|
389
|
+
return {
|
|
390
|
+
content: [
|
|
391
|
+
{
|
|
392
|
+
type: 'text',
|
|
393
|
+
text: JSON.stringify(facts, null, 2),
|
|
394
|
+
},
|
|
395
|
+
],
|
|
396
|
+
};
|
|
397
|
+
}
|
|
398
|
+
case 'modular_consolidate': {
|
|
399
|
+
const { facts } = args;
|
|
400
|
+
if (!Array.isArray(facts)) {
|
|
401
|
+
throw new McpError(ErrorCode.InvalidParams, 'facts must be an array');
|
|
402
|
+
}
|
|
403
|
+
const result = consolidateMemory(facts);
|
|
404
|
+
return {
|
|
405
|
+
content: [
|
|
406
|
+
{
|
|
407
|
+
type: 'text',
|
|
408
|
+
text: JSON.stringify(result, null, 2),
|
|
409
|
+
},
|
|
410
|
+
],
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
default:
|
|
414
|
+
throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
catch (error) {
|
|
418
|
+
if (error instanceof McpError) {
|
|
419
|
+
throw error;
|
|
420
|
+
}
|
|
421
|
+
throw new McpError(ErrorCode.InternalError, `Error executing ${name}: ${error}`);
|
|
422
|
+
}
|
|
423
|
+
});
|
|
424
|
+
return server;
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Extract headlines from tree for summary
|
|
428
|
+
*/
|
|
429
|
+
function extractHeadlines(node) {
|
|
430
|
+
const headlines = [];
|
|
431
|
+
if (node.depth > 0) {
|
|
432
|
+
headlines.push('#'.repeat(node.depth) + ' ' + node.title);
|
|
433
|
+
}
|
|
434
|
+
for (const child of node.children) {
|
|
435
|
+
headlines.push(...extractHeadlines(child));
|
|
436
|
+
}
|
|
437
|
+
return headlines;
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Get budget weight for knowledge type
|
|
441
|
+
*/
|
|
442
|
+
function getBudgetWeight(type) {
|
|
443
|
+
const weights = {
|
|
444
|
+
'ground-truth': 0.30,
|
|
445
|
+
'guideline': 0.15,
|
|
446
|
+
'framework': 0.15,
|
|
447
|
+
'evidence': 0.20,
|
|
448
|
+
'signal': 0.12,
|
|
449
|
+
'hypothesis': 0.08,
|
|
450
|
+
};
|
|
451
|
+
return weights[type];
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Consolidate memory facts with ranking and deduplication
|
|
455
|
+
*/
|
|
456
|
+
function consolidateMemory(facts) {
|
|
457
|
+
// Simulate consolidation using ranking algorithm
|
|
458
|
+
const query = "general"; // Default query for ranking
|
|
459
|
+
const rankedFacts = rankFacts(facts, query, facts.length);
|
|
460
|
+
// Split based on scores and patterns
|
|
461
|
+
const kept = rankedFacts.filter(f => f.confidence > 0.7);
|
|
462
|
+
const pruned = rankedFacts.filter(f => f.confidence <= 0.3);
|
|
463
|
+
// Find potential merges (facts with similar keys/values)
|
|
464
|
+
const merged = [];
|
|
465
|
+
const mergedSet = new Set();
|
|
466
|
+
for (let i = 0; i < kept.length; i++) {
|
|
467
|
+
if (mergedSet.has(kept[i].key))
|
|
468
|
+
continue;
|
|
469
|
+
const similar = kept.slice(i + 1).filter(f => !mergedSet.has(f.key) &&
|
|
470
|
+
(f.key.startsWith(kept[i].key) || kept[i].key.startsWith(f.key) ||
|
|
471
|
+
f.value.includes(kept[i].value.slice(0, 20)) || kept[i].value.includes(f.value.slice(0, 20))));
|
|
472
|
+
if (similar.length > 0) {
|
|
473
|
+
merged.push({
|
|
474
|
+
primary: kept[i],
|
|
475
|
+
merged: similar,
|
|
476
|
+
});
|
|
477
|
+
similar.forEach(f => mergedSet.add(f.key));
|
|
478
|
+
mergedSet.add(kept[i].key);
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
// Promote high-confidence, frequently accessed facts
|
|
482
|
+
const promoted = kept.filter(f => f.confidence > 0.9 &&
|
|
483
|
+
(f.access_count || 0) > 3 &&
|
|
484
|
+
!mergedSet.has(f.key));
|
|
485
|
+
return {
|
|
486
|
+
kept: kept.filter(f => !mergedSet.has(f.key) && !promoted.includes(f)),
|
|
487
|
+
pruned,
|
|
488
|
+
merged,
|
|
489
|
+
promoted,
|
|
490
|
+
};
|
|
491
|
+
}
|
|
492
|
+
//# sourceMappingURL=modular-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modular-server.js","sourceRoot":"","sources":["../../../server/mcp/modular-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Transport Layer
|
|
3
|
+
*
|
|
4
|
+
* Handles stdio and HTTP transport for the MCP server
|
|
5
|
+
*/
|
|
6
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
7
|
+
export interface TransportOptions {
|
|
8
|
+
/**
|
|
9
|
+
* Transport type: 'stdio' for CLI, 'sse' for HTTP
|
|
10
|
+
*/
|
|
11
|
+
type: 'stdio' | 'sse';
|
|
12
|
+
/**
|
|
13
|
+
* Port for SSE transport (ignored for stdio)
|
|
14
|
+
*/
|
|
15
|
+
port?: number;
|
|
16
|
+
/**
|
|
17
|
+
* Host for SSE transport (default: 'localhost')
|
|
18
|
+
*/
|
|
19
|
+
host?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Create and run transport for MCP server
|
|
23
|
+
*/
|
|
24
|
+
export declare function runTransport(server: Server, options?: TransportOptions): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Graceful shutdown handler
|
|
27
|
+
*/
|
|
28
|
+
export declare function setupGracefulShutdown(server: Server): void;
|
|
29
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../server/mcp/transport.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAEnE,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC;IAEtB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAoC,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB/G;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CA6B1D"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Transport Layer
|
|
3
|
+
*
|
|
4
|
+
* Handles stdio and HTTP transport for the MCP server
|
|
5
|
+
*/
|
|
6
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
7
|
+
/**
|
|
8
|
+
* Create and run transport for MCP server
|
|
9
|
+
*/
|
|
10
|
+
export async function runTransport(server, options = { type: 'stdio' }) {
|
|
11
|
+
const { type } = options;
|
|
12
|
+
switch (type) {
|
|
13
|
+
case 'stdio': {
|
|
14
|
+
// Use stdio transport for CLI usage
|
|
15
|
+
const transport = new StdioServerTransport();
|
|
16
|
+
await server.connect(transport);
|
|
17
|
+
console.error('Modular MCP Server running on stdio');
|
|
18
|
+
break;
|
|
19
|
+
}
|
|
20
|
+
case 'sse': {
|
|
21
|
+
// For HTTP mode, we'll use a simple express server
|
|
22
|
+
// The SSE transport in MCP SDK might have a different API
|
|
23
|
+
console.error(`HTTP transport not yet implemented. Use stdio transport instead.`);
|
|
24
|
+
console.error(`To use HTTP, run: npx modular-mcp-server`);
|
|
25
|
+
throw new Error('HTTP transport not implemented');
|
|
26
|
+
}
|
|
27
|
+
default:
|
|
28
|
+
throw new Error(`Unsupported transport type: ${type}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Graceful shutdown handler
|
|
33
|
+
*/
|
|
34
|
+
export function setupGracefulShutdown(server) {
|
|
35
|
+
async function shutdown(signal) {
|
|
36
|
+
console.error(`\nReceived ${signal}, shutting down gracefully...`);
|
|
37
|
+
try {
|
|
38
|
+
await server.close();
|
|
39
|
+
console.error('MCP Server closed successfully');
|
|
40
|
+
process.exit(0);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
console.error('Error during shutdown:', error);
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Handle common termination signals
|
|
48
|
+
process.on('SIGINT', () => shutdown('SIGINT'));
|
|
49
|
+
process.on('SIGTERM', () => shutdown('SIGTERM'));
|
|
50
|
+
process.on('SIGQUIT', () => shutdown('SIGQUIT'));
|
|
51
|
+
// Handle uncaught exceptions and unhandled rejections
|
|
52
|
+
process.on('uncaughtException', (error) => {
|
|
53
|
+
console.error('Uncaught Exception:', error);
|
|
54
|
+
shutdown('uncaughtException');
|
|
55
|
+
});
|
|
56
|
+
process.on('unhandledRejection', (reason, promise) => {
|
|
57
|
+
console.error('Unhandled Rejection at:', promise, 'reason:', reason);
|
|
58
|
+
shutdown('unhandledRejection');
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../server/mcp/transport.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAoBjF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc,EAAE,UAA4B,EAAE,IAAI,EAAE,OAAO,EAAE;IAC9F,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAEzB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,oCAAoC;YACpC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;YAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACrD,MAAM;QACR,CAAC;QAED,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,mDAAmD;YACnD,0DAA0D;YAC1D,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;YAClF,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED;YACE,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAClD,KAAK,UAAU,QAAQ,CAAC,MAAc;QACpC,OAAO,CAAC,KAAK,CAAC,cAAc,MAAM,+BAA+B,CAAC,CAAC;QAEnE,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAEjD,sDAAsD;IACtD,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;QACxC,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;QAC5C,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QACnD,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACrE,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-sdk.d.ts","sourceRoot":"","sources":["../../../server/routes/agent-sdk.ts"],"names":[],"mappings":"AAMA,QAAA,MAAM,MAAM,4CAAW,CAAC;AA+GxB,eAAe,MAAM,CAAC"}
|