feat(mcp): add prefix filed to bridge server configuraiton (#148)

This commit is contained in:
sigoden
2024-12-13 06:01:53 +08:00
committed by GitHub
parent 33ef4f9178
commit 8e8b2f736b
2 changed files with 19 additions and 6 deletions
+14 -3
View File
@@ -4,7 +4,7 @@ Let external MCP tools be used by LLM-Functions.
## Get Started ## Get Started
1. Create a `mpc.json` at `<llm-functions-dir>`. ### 1. Create a `mpc.json` at `<llm-functions-dir>`.
```json ```json
{ {
@@ -17,6 +17,15 @@ Let external MCP tools be used by LLM-Functions.
"/tmp/foo.db" "/tmp/foo.db"
] ]
}, },
"git": {
"command": "uvx",
"args": [
"mcp-server-git",
"--repository",
"path/to/git/repo"
],
"prefix": false
},
"github": { "github": {
"command": "npx", "command": "npx",
"args": [ "args": [
@@ -31,9 +40,11 @@ Let external MCP tools be used by LLM-Functions.
} }
``` ```
> MCP-Bridge will launch the server and register all the tools listed by the server. The tool identifier will be `server_toolname` to avoid clashes. > MCP-Bridge will launch the server and register all the tools listed by the server.
2. Run the bridge server, build mcp tool binaries, update functions.json, all with: > To avoid name clashes, The server automatically prefix tool names with `<server>_`. You can disable this behavior by add `prefix: false` to server configuration.
### 2. Run the bridge server, build mcp tool binaries, update functions.json, all with:
``` ```
argc mcp start argc mcp start
+5 -3
View File
@@ -29,8 +29,9 @@ try {
async function startMcpServer(id, serverConfig) { async function startMcpServer(id, serverConfig) {
console.log(`Starting ${id} server...`); console.log(`Starting ${id} server...`);
const capabilities = { tools: {} }; const capabilities = { tools: {} };
const { prefix = true, ...rest } = serverConfig;
const transport = new StdioClientTransport({ const transport = new StdioClientTransport({
...serverConfig, ...rest,
}); });
const client = new Client( const client = new Client(
{ name: id, version: "1.0.0" }, { name: id, version: "1.0.0" },
@@ -42,7 +43,7 @@ async function startMcpServer(id, serverConfig) {
({ name, description, inputSchema }) => ({ name, description, inputSchema }) =>
({ ({
spec: { spec: {
name: `${normalizeToolName(`${id}_${name}`)}`, name: `${formatToolName(id, name, prefix)}`,
description, description,
parameters: inputSchema, parameters: inputSchema,
}, },
@@ -181,7 +182,8 @@ function arrayify(a) {
return r return r
} }
function normalizeToolName(name) { function formatToolName(serverName, toolName, prefix) {
const name = prefix ? `${serverName}_${toolName}` : toolName;
return name.toLowerCase().replace(/-/g, "_"); return name.toLowerCase().replace(/-/g, "_");
} }