Skip to content

Commit 6542b4f

Browse files
committed
feat: make domains configurable and discoverable
1 parent 2763575 commit 6542b4f

File tree

8 files changed

+36
-33
lines changed

8 files changed

+36
-33
lines changed

src/modelscope_mcp_server/constants.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,8 @@
11
"""Global constants for ModelScope MCP Server."""
22

33
# ModelScope domains
4-
MODELSCOPE_DOMAIN = "https://modelscope.cn"
5-
MODELSCOPE_API_INFERENCE_DOMAIN = "https://api-inference.modelscope.cn"
6-
7-
# ModelScope API endpoints
8-
MODELSCOPE_API_ENDPOINT = f"{MODELSCOPE_DOMAIN}/api/v1"
9-
MODELSCOPE_OPENAPI_ENDPOINT = f"{MODELSCOPE_DOMAIN}/openapi/v1"
10-
MODELSCOPE_API_INFERENCE_ENDPOINT = f"{MODELSCOPE_API_INFERENCE_DOMAIN}/v1"
4+
DEFAULT_MODELSCOPE_DOMAIN = "https://modelscope.cn"
5+
DEFAULT_MODELSCOPE_API_INFERENCE_DOMAIN = "https://api-inference.modelscope.cn"
116

127
# Default model IDs for content generation
138
DEFAULT_TEXT_TO_IMAGE_MODEL = "MusePublic/489_ckpt_FLUX_1"

src/modelscope_mcp_server/settings.py

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,9 @@
77
DEFAULT_API_TIMEOUT_SECONDS,
88
DEFAULT_IMAGE_GENERATION_TIMEOUT_SECONDS,
99
DEFAULT_IMAGE_TO_IMAGE_MODEL,
10+
DEFAULT_MODELSCOPE_API_INFERENCE_DOMAIN,
11+
DEFAULT_MODELSCOPE_DOMAIN,
1012
DEFAULT_TEXT_TO_IMAGE_MODEL,
11-
MODELSCOPE_API_ENDPOINT,
12-
MODELSCOPE_API_INFERENCE_ENDPOINT,
13-
MODELSCOPE_OPENAPI_ENDPOINT,
1413
)
1514

1615

@@ -25,19 +24,17 @@ class Settings(BaseSettings):
2524
extra="ignore",
2625
)
2726

28-
# ModelScope API settings
27+
# Authentication settings
2928
api_token: str | None = Field(default=None, description="ModelScope API token for authentication")
30-
api_base_url: str = Field(
31-
default=MODELSCOPE_API_ENDPOINT,
32-
description="Base URL for ModelScope API",
33-
)
34-
openapi_base_url: str = Field(
35-
default=MODELSCOPE_OPENAPI_ENDPOINT,
36-
description="Base URL for ModelScope OpenAPI",
29+
30+
# Domain settings
31+
main_domain: str = Field(
32+
default=DEFAULT_MODELSCOPE_DOMAIN,
33+
description="ModelScope website domain",
3734
)
38-
api_inference_base_url: str = Field(
39-
default=MODELSCOPE_API_INFERENCE_ENDPOINT,
40-
description="Base URL for ModelScope API Inference",
35+
api_inference_domain: str = Field(
36+
default=DEFAULT_MODELSCOPE_API_INFERENCE_DOMAIN,
37+
description="ModelScope API inference domain",
4138
)
4239

4340
# Default model settings
@@ -99,9 +96,8 @@ def show_settings(self) -> None:
9996
self.api_token[:-8] + "********" if self.api_token and len(self.api_token) > 4 else "Not configured"
10097
)
10198
print(f" • Token: {masked_token}")
102-
print(f" • Base URL: {self.api_base_url}")
103-
print(f" • OpenAPI URL: {self.openapi_base_url}")
104-
print(f" • Inference URL: {self.api_inference_base_url}")
99+
print(f" • Main Domain: {self.main_domain}")
100+
print(f" • API Inference Domain: {self.api_inference_domain}")
105101
print()
106102

107103
# Default Models

src/modelscope_mcp_server/tools/aigc.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ async def generate_image(
7676
if not settings.is_api_token_configured():
7777
raise ValueError("API token is not set")
7878

79-
url = f"{settings.api_inference_base_url}/images/generations"
79+
url = f"{settings.api_inference_domain}/v1/images/generations"
8080

8181
payload = {
8282
"model": model,

src/modelscope_mcp_server/tools/context.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ async def get_current_user() -> UserInfo:
3939
if not settings.is_api_token_configured():
4040
return UserInfo(authenticated=False, reason="API token is not set")
4141

42-
url = f"{settings.api_base_url}/users/login/info"
42+
url = f"{settings.main_domain}/api/v1/users/login/info"
4343

4444
try:
4545
response = default_client.get(url)
@@ -78,4 +78,8 @@ async def get_environment_info() -> EnvironmentInfo:
7878
fastmcp_version=get_fastmcp_version(),
7979
mcp_protocol_version=get_mcp_protocol_version(),
8080
python_version=get_python_version(),
81+
main_domain=settings.main_domain,
82+
api_inference_domain=settings.api_inference_domain,
83+
default_text_to_image_model=settings.default_text_to_image_model,
84+
default_image_to_image_model=settings.default_image_to_image_model,
8185
)

src/modelscope_mcp_server/tools/mcp.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from pydantic import Field
1111

1212
from ..client import default_client
13-
from ..constants import MODELSCOPE_DOMAIN, MODELSCOPE_OPENAPI_ENDPOINT
13+
from ..settings import settings
1414
from ..types import McpServer
1515

1616
logger = logging.get_logger(__name__)
@@ -63,7 +63,7 @@ async def search_mcp_servers(
6363
limit: Annotated[int, Field(description="Maximum number of servers to return", ge=1, le=100)] = 10,
6464
) -> list[McpServer]:
6565
"""Search for MCP servers on ModelScope."""
66-
url = f"{MODELSCOPE_OPENAPI_ENDPOINT}/mcp/servers"
66+
url = f"{settings.main_domain}/openapi/v1/mcp/servers"
6767

6868
# Build filter object
6969
filter_obj = {}
@@ -86,7 +86,7 @@ async def search_mcp_servers(
8686
servers = []
8787
for server_data in servers_data:
8888
id = server_data.get("id", "")
89-
modelscope_url = f"{MODELSCOPE_DOMAIN}/mcp/servers/{id}"
89+
modelscope_url = f"{settings.main_domain}/mcp/servers/{id}"
9090

9191
server = McpServer(
9292
id=id,

src/modelscope_mcp_server/tools/model.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ async def search_models(
5353
limit: Annotated[int, Field(description="Maximum number of models to return", ge=1, le=30)] = 10,
5454
) -> list[Model]:
5555
"""Search for models on ModelScope."""
56-
url = f"{settings.api_base_url}/dolphin/models"
56+
url = f"{settings.main_domain}/api/v1/dolphin/models"
5757

5858
# Build criterion for task filter
5959
criterion = []

src/modelscope_mcp_server/tools/paper.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
from pydantic import Field
1111

1212
from ..client import default_client
13-
from ..constants import MODELSCOPE_DOMAIN
1413
from ..settings import settings
1514
from ..types import Paper
1615

@@ -39,7 +38,7 @@ async def search_papers(
3938
limit: Annotated[int, Field(description="Maximum number of papers to return", ge=1, le=100)] = 10,
4039
) -> list[Paper]:
4140
"""Search for papers on ModelScope."""
42-
url = f"{settings.api_base_url}/dolphin/papers"
41+
url = f"{settings.main_domain}/api/v1/dolphin/papers"
4342

4443
request_data = {
4544
"Query": query,
@@ -56,7 +55,7 @@ async def search_papers(
5655
papers = []
5756
for paper_data in papers_data:
5857
arxiv_id = paper_data.get("ArxivId")
59-
modelscope_url = f"{MODELSCOPE_DOMAIN}/papers/{arxiv_id}"
58+
modelscope_url = f"{settings.main_domain}/papers/{arxiv_id}"
6059

6160
paper = Paper(
6261
arxiv_id=arxiv_id,

src/modelscope_mcp_server/types.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,16 @@ class ImageGenerationResult(BaseModel):
9898
class EnvironmentInfo(BaseModel):
9999
"""Environment information."""
100100

101+
# Versions
101102
server_version: Annotated[str, Field(description="ModelScope MCP Server version")]
102103
fastmcp_version: Annotated[str, Field(description="FastMCP framework version")]
103104
mcp_protocol_version: Annotated[str, Field(description="MCP protocol version")]
104105
python_version: Annotated[str, Field(description="Python runtime version")]
106+
107+
# Domains
108+
main_domain: Annotated[str, Field(description="ModelScope website domain")]
109+
api_inference_domain: Annotated[str, Field(description="ModelScope API inference domain")]
110+
111+
# Settings
112+
default_text_to_image_model: Annotated[str, Field(description="Default text-to-image model")]
113+
default_image_to_image_model: Annotated[str, Field(description="Default image-to-image model")]

0 commit comments

Comments
 (0)