chore: sync lockfile and payload-ai extensions for release v1.9.10
Some checks failed
Monorepo Pipeline / ⚡ Prioritize Release (push) Successful in 2s
Monorepo Pipeline / 🧪 Test (push) Successful in 1m20s
Monorepo Pipeline / 🧹 Lint (push) Successful in 4m27s
Monorepo Pipeline / 🏗️ Build (push) Successful in 2m35s
Monorepo Pipeline / 🐳 Build Gatekeeper (Product) (push) Failing after 17s
Monorepo Pipeline / 🐳 Build Build-Base (push) Failing after 17s
Monorepo Pipeline / 🐳 Build Production Runtime (push) Failing after 17s
Monorepo Pipeline / 🚀 Release (push) Successful in 1m33s

This commit is contained in:
2026-03-03 12:40:41 +01:00
parent 24fde20030
commit 79d221de5e
22 changed files with 838 additions and 325 deletions

View File

@@ -0,0 +1,78 @@
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { z } from 'zod';
import { QdrantMemoryService } from './qdrant.js';
async function main() {
const server = new McpServer({
name: '@mintel/memory-mcp',
version: '1.0.0',
});
const qdrantService = new QdrantMemoryService(process.env.QDRANT_URL || 'http://localhost:6333');
// Initialize embedding model and Qdrant connection
try {
await qdrantService.initialize();
} catch (e) {
console.error('Failed to initialize local dependencies. Exiting.');
process.exit(1);
}
server.tool(
'store_memory',
'Store a new piece of knowledge/memory into the vector database. Use this to remember architectural decisions, preferences, aliases, etc.',
{
label: z.string().describe('A short, descriptive label or title for the memory (e.g., "Architektur-Entscheidungen")'),
content: z.string().describe('The actual content to remember (e.g., "In diesem Projekt nutzen wir lieber Composition over Inheritance.")'),
},
async (args) => {
const success = await qdrantService.storeMemory(args.label, args.content);
if (success) {
return {
content: [{ type: 'text', text: `Successfully stored memory: [${args.label}]` }],
};
} else {
return {
content: [{ type: 'text', text: `Failed to store memory: [${args.label}]` }],
isError: true,
};
}
}
);
server.tool(
'retrieve_memory',
'Retrieve relevant memories from the vector database based on a semantic search query.',
{
query: z.string().describe('The search query to find relevant memories.'),
limit: z.number().optional().describe('Maximum number of results to return (default: 5)'),
},
async (args) => {
const results = await qdrantService.retrieveMemory(args.query, args.limit || 5);
if (results.length === 0) {
return {
content: [{ type: 'text', text: 'No relevant memories found.' }],
};
}
const formattedResults = results
.map(r => `- [${r.label}] (Score: ${r.score.toFixed(3)}): ${r.content}`)
.join('\n');
return {
content: [{ type: 'text', text: `Found ${results.length} memories:\n\n${formattedResults}` }],
};
}
);
const transport = new StdioServerTransport();
await server.connect(transport);
console.error('Memory MCP server is running and ready to accept connections over stdio.');
}
main().catch((error) => {
console.error('Fatal error in main():', error);
process.exit(1);
});