Skip to content

Commit a7aee07

Browse files
authored
Merge pull request #1 from metatool-ai/server-name-sanitize
0.0.2 attempt to better handle server names in routing
2 parents dfda41b + ba92a67 commit a7aee07

File tree

5 files changed

+47
-7
lines changed

5 files changed

+47
-7
lines changed

pyproject.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "mcp-server-metatool"
7-
version = "0.0.1"
7+
version = "0.0.2"
88
description = "Metatool MCP Server"
99
readme = "README.md"
1010
requires-python = ">=3.10"
@@ -19,6 +19,10 @@ dependencies = [
1919
"mcp",
2020
]
2121

22+
[project.urls]
23+
homepage = "https://github.com/metatool-ai/mcp-server-metatool"
24+
repository = "https://github.com/metatool-ai/mcp-server-metatool"
25+
2226
[tool.uv]
2327
dev-dependencies = [
2428
"build",

setup.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from setuptools import setup, find_packages
2+
3+
setup(
4+
name="mcp-server-metatool",
5+
version="0.0.2",
6+
author="James Zhang",
7+
author_email="[email protected]",
8+
description="Metatool MCP Server",
9+
long_description=open("README.md").read(),
10+
long_description_content_type="text/markdown",
11+
python_requires=">=3.10",
12+
packages=find_packages(where="src"),
13+
package_dir={"": "src"},
14+
classifiers=[
15+
"Programming Language :: Python :: 3.10",
16+
],
17+
install_requires=["mcp", "requests"],
18+
extras_require={
19+
"dev": [
20+
"pytest",
21+
"twine",
22+
"wheel",
23+
],
24+
},
25+
)

src/mcp_server_metatool/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
Metatool MCP Server
33
"""
44

5-
__version__ = "0.0.1"
5+
__version__ = "0.0.2"
66

77
from .server import serve
88

src/mcp_server_metatool/__main__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# __main__.py
12

23
from mcp_server_metatool import main
34

src/mcp_server_metatool/server.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,21 @@
77
from mcp.server import Server, NotificationOptions
88
import httpx
99
import os
10+
import re
11+
12+
13+
def sanitize_name(name: str) -> str:
14+
"""Sanitize the name to only contain allowed characters."""
15+
return re.sub(r"[^a-zA-Z0-9_-]", "", name)
1016

1117

1218
# Create and run the proxy server with the list of sessions
1319
server = Server("mcp-server-metatool")
1420

1521

16-
METATOOL_API_BASE_URL = os.environ.get("METATOOL_API_BASE_URL", "http://localhost:12005")
22+
METATOOL_API_BASE_URL = os.environ.get(
23+
"METATOOL_API_BASE_URL", "http://localhost:12005"
24+
)
1725

1826

1927
async def get_mcp_servers() -> list[StdioServerParameters]:
@@ -64,7 +72,9 @@ async def handle_list_tools() -> list[types.Tool]:
6472
response = await session_data["session"].list_tools()
6573
for tool in response.tools:
6674
tool_copy = tool.copy()
67-
tool_copy.name = f"{session_data['name']}0{tool.name}"
75+
tool_copy.name = (
76+
f"{sanitize_name(session_data['name'])}__{tool.name}"
77+
)
6878
all_tools.append(tool_copy)
6979

7080
return all_tools
@@ -77,10 +87,10 @@ async def handle_call_tool(
7787
try:
7888
# Split the prefixed name into server name and tool name
7989
try:
80-
server_name, tool_name = name.split("0", 1)
90+
server_name, tool_name = name.split("__", 1)
8191
except ValueError:
8292
raise ValueError(
83-
f"Invalid tool name format: {name}. Expected format: server_name0tool_name"
93+
f"Invalid tool name format: {name}. Expected format: server_name__tool_name"
8494
)
8595

8696
# Get all server parameters
@@ -91,7 +101,7 @@ async def handle_call_tool(
91101
async with stdio_client(params) as (read, write):
92102
async with ClientSession(read, write) as session:
93103
session_data = await initialize_session(session)
94-
if session_data["name"] == server_name:
104+
if sanitize_name(session_data["name"]) == server_name:
95105
result = await session.call_tool(
96106
tool_name,
97107
(arguments or {}),

0 commit comments

Comments
 (0)