MCPcopy Index your code
hub / github.com/sourcebot-dev/sourcebot / createMcpServer

Function createMcpServer

packages/web/src/ee/features/mcp/server.ts:30–150  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

28const dedent = _dedent.withOptions({ alignValues: true });
29
30export async function createMcpServer(): Promise<McpServer> {
31 // Defense-in-depth: the MCP server is a paid feature. The /api/ee/mcp route
32 // gates on the `mcp` entitlement before calling this; this assertion
33 // backstops that contract so the server can't be constructed on a
34 // non-entitled deployment.
35 if (!(await hasEntitlement('mcp'))) {
36 throw new Error('The MCP server is not available in the current plan.');
37 }
38
39 const server = new McpServer({
40 name: 'sourcebot-mcp-server',
41 version: SOURCEBOT_VERSION,
42 });
43
44 const configuredLanguageModels = await getConfiguredLanguageModelsInfo();
45 const hasLanguageModels = configuredLanguageModels.length > 0;
46
47 const toolContext: ToolContext = {
48 source: 'sourcebot-mcp-server',
49 }
50
51 registerMcpTool(server, grepDefinition, toolContext);
52 registerMcpTool(server, globDefinition, toolContext);
53 registerMcpTool(server, getDiffDefinition, toolContext);
54 registerMcpTool(server, listCommitsDefinition, toolContext);
55 registerMcpTool(server, listReposDefinition, toolContext);
56 registerMcpTool(server, readFileDefinition, toolContext);
57 registerMcpTool(server, listTreeDefinition, toolContext);
58 registerMcpTool(server, findSymbolDefinitionsDefinition, toolContext);
59 registerMcpTool(server, findSymbolReferencesDefinition, toolContext);
60
61 server.registerTool(
62 "list_language_models",
63 {
64 description: dedent`Lists the available language models configured on the Sourcebot instance. Use this to discover which models can be specified when calling ask_codebase.`,
65 annotations: {
66 readOnlyHint: true,
67 idempotentHint: true,
68 }
69 },
70 async () => {
71 const models = await getConfiguredLanguageModelsInfo();
72 captureEvent('tool_used', {
73 toolName: 'list_language_models',
74 source: 'sourcebot-mcp-server',
75 success: true,
76 });
77 return { content: [{ type: "text", text: JSON.stringify(models) }] };
78 }
79 );
80
81 if (hasLanguageModels) {
82 server.registerTool(
83 "ask_codebase",
84 {
85 description: dedent`
86 DO NOT USE THIS TOOL UNLESS EXPLICITLY ASKED TO. THE PROMPT MUST SPECIFICALLY ASK TO USE THE ask_codebase TOOL.
87

Callers 1

route.tsFile · 0.90

Calls 6

hasEntitlementFunction · 0.90
registerMcpToolFunction · 0.90
captureEventFunction · 0.90
askCodebaseFunction · 0.90
isServiceErrorFunction · 0.90

Tested by

no test coverage detected