Compare commits

...

2 Commits

Author SHA1 Message Date
Sunrisea f24f12c4ba
Support service metadata, update nacos-sdk-python version (#22) 2025-08-08 11:00:09 +08:00
Sunrisea cf9477af7b
Update and optimize log (#19)
* update log

* version 1.0.8
2025-07-29 12:00:01 +08:00
4 changed files with 20 additions and 5 deletions

View File

@ -3,6 +3,7 @@ import json
import logging import logging
from contextlib import AbstractAsyncContextManager from contextlib import AbstractAsyncContextManager
from typing import Literal, Callable, Any from typing import Literal, Callable, Any
from importlib import metadata
import jsonref import jsonref
from maintainer.ai.model.nacos_mcp_info import McpToolMeta, McpServerDetailInfo, \ from maintainer.ai.model.nacos_mcp_info import McpToolMeta, McpServerDetailInfo, \
@ -278,6 +279,10 @@ class NacosServer(Server):
asyncio.create_task(self.subscribe()) asyncio.create_task(self.subscribe())
if self._nacos_settings.SERVICE_REGISTER and (self.type == "mcp-sse" if self._nacos_settings.SERVICE_REGISTER and (self.type == "mcp-sse"
or self.type == "mcp-streamable"): or self.type == "mcp-streamable"):
version = metadata.version('nacos-mcp-wrapper-python')
service_meta_data = {
"source": f"nacos-mcp-wrapper-python-{version}",
**self._nacos_settings.SERVICE_META_DATA}
await self.naming_client.register_instance( await self.naming_client.register_instance(
request=RegisterInstanceParam( request=RegisterInstanceParam(
group_name=server_detail_info.remoteServerConfig.serviceRef.groupName, group_name=server_detail_info.remoteServerConfig.serviceRef.groupName,
@ -285,8 +290,10 @@ class NacosServer(Server):
ip=self._nacos_settings.SERVICE_IP, ip=self._nacos_settings.SERVICE_IP,
port=self._nacos_settings.SERVICE_PORT if self._nacos_settings.SERVICE_PORT else port, port=self._nacos_settings.SERVICE_PORT if self._nacos_settings.SERVICE_PORT else port,
ephemeral=self._nacos_settings.SERVICE_EPHEMERAL, ephemeral=self._nacos_settings.SERVICE_EPHEMERAL,
metadata=service_meta_data
) )
) )
logging.info(f"Register to nacos success,{self.name},version:{self.version}")
return return
mcp_tool_specification = None mcp_tool_specification = None
@ -335,7 +342,7 @@ class NacosServer(Server):
mcp_tool_specification, mcp_tool_specification,
endpoint_spec) endpoint_spec)
except Exception as e: except Exception as e:
logger.info(f"Failed to create MCP server to Nacos,try to update mcp server") logger.info(f"Found MCP server {self.name} in Nacos,try to update it")
version_detail = None version_detail = None
try: try:
version_detail = await self.mcp_service.get_mcp_server_detail( version_detail = await self.mcp_service.get_mcp_server_detail(
@ -344,12 +351,12 @@ class NacosServer(Server):
self.version self.version
) )
except Exception as e_2: except Exception as e_2:
logger.info(f"Cant found version {self.version} of Mcp server {self.name}") logger.info(f" Version {self.version} of Mcp server {self.name} is not in Nacos, try to update it")
if version_detail is None: if version_detail is None:
await self.mcp_service.update_mcp_server( await self.mcp_service.update_mcp_server(
self._nacos_settings.NAMESPACE, self._nacos_settings.NAMESPACE,
self.name, self.name,
False, True,
server_basic_info, server_basic_info,
mcp_tool_specification, mcp_tool_specification,
endpoint_spec endpoint_spec
@ -362,6 +369,8 @@ class NacosServer(Server):
f"mcp server info is not compatible,{self.name},version:{self.version},reason:{error_msg}" f"mcp server info is not compatible,{self.name},version:{self.version},reason:{error_msg}"
) )
if self._nacos_settings.SERVICE_REGISTER: if self._nacos_settings.SERVICE_REGISTER:
version = metadata.version('nacos-mcp-wrapper-python')
service_meta_data = {"source": f"nacos-mcp-wrapper-python-{version}",**self._nacos_settings.SERVICE_META_DATA}
await self.naming_client.register_instance( await self.naming_client.register_instance(
request=RegisterInstanceParam( request=RegisterInstanceParam(
group_name="DEFAULT_GROUP" if self._nacos_settings.SERVICE_GROUP is None else self._nacos_settings.SERVICE_GROUP, group_name="DEFAULT_GROUP" if self._nacos_settings.SERVICE_GROUP is None else self._nacos_settings.SERVICE_GROUP,
@ -369,8 +378,10 @@ class NacosServer(Server):
ip=self._nacos_settings.SERVICE_IP, ip=self._nacos_settings.SERVICE_IP,
port=self._nacos_settings.SERVICE_PORT if self._nacos_settings.SERVICE_PORT else port, port=self._nacos_settings.SERVICE_PORT if self._nacos_settings.SERVICE_PORT else port,
ephemeral=self._nacos_settings.SERVICE_EPHEMERAL, ephemeral=self._nacos_settings.SERVICE_EPHEMERAL,
metadata=service_meta_data,
) )
) )
asyncio.create_task(self.subscribe()) asyncio.create_task(self.subscribe())
logging.info(f"Register to nacos success,{self.name},version:{self.version}")
except Exception as e: except Exception as e:
logging.error(f"Failed to register MCP server to Nacos: {e}") logging.error(f"Failed to register MCP server to Nacos: {e}")

View File

@ -63,6 +63,10 @@ class NacosSettings(BaseSettings):
description="nacos connection labels", description="nacos connection labels",
default={}) default={})
SERVICE_META_DATA : Optional[dict] = Field(
description="nacos service metadata",
default={})
class Config: class Config:
env_prefix = "NACOS_MCP_SERVER_" env_prefix = "NACOS_MCP_SERVER_"

View File

@ -1,7 +1,7 @@
psutil==7.0.0 psutil==7.0.0
anyio==4.9.0 anyio==4.9.0
mcp==1.9.2 mcp==1.9.2
nacos-sdk-python>=2.0.8 nacos-sdk-python>=2.0.9
pydantic==2.11.3 pydantic==2.11.3
pydantic-settings==2.9.1 pydantic-settings==2.9.1
jsonref==1.1.0 jsonref==1.1.0

View File

@ -9,7 +9,7 @@ def read_requirements():
setup( setup(
name='nacos-mcp-wrapper-python', name='nacos-mcp-wrapper-python',
version='1.0.7', # 项目的版本号 version='1.0.9', # 项目的版本号
packages=find_packages( packages=find_packages(
exclude=["test", "*.tests", "*.tests.*", "tests.*", "tests"]), # 自动发现所有包 exclude=["test", "*.tests", "*.tests.*", "tests.*", "tests"]), # 自动发现所有包
url="https://github.com/nacos-group/nacos-mcp-wrapper-python", url="https://github.com/nacos-group/nacos-mcp-wrapper-python",