@mseep/falkordb-mcpserver
Version:
Model Context Protocol server for FalkorDB
114 lines (113 loc) • 4.85 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.mcpController = exports.MCPController = void 0;
const falkordb_service_1 = require("../services/falkordb.service");
class MCPController {
/**
* Process MCP context requests
*/
processContextRequest(req, res) {
return __awaiter(this, void 0, void 0, function* () {
try {
const contextRequest = req.body;
if (!contextRequest.query) {
return res.status(400).json({ error: 'Query is required' });
}
// Graph name is always required from the client
if (!contextRequest.graphName) {
return res.status(400).json({ error: 'Graph name is required' });
}
const startTime = Date.now();
// Execute the query on FalkorDB
const result = yield falkordb_service_1.falkorDBService.executeQuery(contextRequest.graphName, contextRequest.query, contextRequest.params);
const queryTime = Date.now() - startTime;
// Format the result according to MCP standards
const formattedResult = {
data: result,
metadata: {
timestamp: new Date().toISOString(),
queryTime,
provider: 'FalkorDB MCP Server',
source: 'falkordb'
}
};
return res.status(200).json(formattedResult);
}
catch (error) {
console.error('Error processing MCP context request:', error);
return res.status(500).json({
error: error.message,
metadata: {
timestamp: new Date().toISOString()
}
});
}
});
}
/**
* Process MCP metadata requests
*/
processMetadataRequest(req, res) {
return __awaiter(this, void 0, void 0, function* () {
try {
// Return metadata about available graphs or capabilities
const metadata = {
provider: 'FalkorDB MCP Server',
version: '1.0.0',
capabilities: [
'graph.query',
'graph.list',
'node.properties',
'relationship.properties'
],
graphTypes: ['property', 'directed'],
queryLanguages: ['cypher'],
};
return res.status(200).json(metadata);
}
catch (error) {
console.error('Error processing MCP metadata request:', error);
return res.status(500).json({ error: error.message });
}
});
}
/**
* List available graphs in FalkorDB
*/
listGraphs(req, res) {
return __awaiter(this, void 0, void 0, function* () {
try {
const graphNames = yield falkordb_service_1.falkorDBService.listGraphs();
// Format the graph list into a more structured response
const graphs = graphNames.map(name => ({
name,
// We don't have additional metadata from just the graph list
// If needed, additional queries could be made for each graph
// to fetch more detailed information
}));
return res.status(200).json({
data: graphs,
metadata: {
timestamp: new Date().toISOString(),
count: graphs.length
}
});
}
catch (error) {
console.error('Error listing graphs:', error);
return res.status(500).json({ error: error.message });
}
});
}
}
exports.MCPController = MCPController;
exports.mcpController = new MCPController();