From b34519c356144d3216e67b4372e4a16ec69ce2d8 Mon Sep 17 00:00:00 2001 From: Jeremiah Lowin <153965+jlowin@users.noreply.github.com> Date: Sat, 23 Aug 2025 09:47:58 -0400 Subject: [PATCH] Update schema path (#1595) --- docs/deployment/server-configuration.mdx | 22 +- docs/integrations/claude-code.mdx | 2 +- docs/integrations/claude-desktop.mdx | 2 +- docs/integrations/cursor.mdx | 2 +- docs/integrations/mcp-json-configuration.mdx | 2 +- docs/public/schemas/fastmcp-json/latest.json | 296 ++++++++++++++++++ docs/public/schemas/fastmcp-json/v1.json | 296 ++++++++++++++++++ examples/atproto_mcp/fastmcp.json | 4 +- .../env_interpolation_example.json | 4 +- .../fastmcp_config/full_example.fastmcp.json | 9 +- examples/fastmcp_config_demo/fastmcp.json | 9 +- examples/memory.fastmcp.json | 11 +- examples/mount_example.fastmcp.json | 4 +- examples/screenshot.fastmcp.json | 4 +- examples/smart_home/hub.fastmcp.json | 4 +- examples/smart_home/lights.fastmcp.json | 4 +- .../fastmcp_config/v1/fastmcp_config.py | 4 +- .../utilities/fastmcp_config/v1/schema.json | 105 ++----- tests/cli/test_config.py | 2 +- tests/cli/test_fastmcp_config_integration.py | 2 +- tests/cli/test_fastmcp_config_schema.py | 2 +- tests/cli/test_run_config.py | 2 +- 22 files changed, 654 insertions(+), 138 deletions(-) create mode 100644 docs/public/schemas/fastmcp-json/latest.json create mode 100644 docs/public/schemas/fastmcp-json/v1.json diff --git a/docs/deployment/server-configuration.mdx b/docs/deployment/server-configuration.mdx index bee3eb72f..f132e9c6b 100644 --- a/docs/deployment/server-configuration.mdx +++ b/docs/deployment/server-configuration.mdx @@ -33,7 +33,7 @@ FastMCP provides JSON schemas for IDE autocomplete and validation. Add the schem ```json { - "$schema": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "$schema": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "entrypoint": { "file": "server.py", "object": "mcp" @@ -42,8 +42,8 @@ FastMCP provides JSON schemas for IDE autocomplete and validation. Add the schem ``` Two schema URLs are available: -- **Version-specific**: `https://gofastmcp.com/schemas/fastmcp_config/v1.json` -- **Latest version**: `https://gofastmcp.com/schemas/fastmcp_config/latest.json` +- **Version-specific**: `https://gofastmcp.com/public/schemas/fastmcp.json/v1.json` +- **Latest version**: `https://gofastmcp.com/public/schemas/fastmcp.json/latest.json` Modern IDEs like VS Code will automatically provide autocomplete suggestions, validation, and inline documentation when the schema is specified. @@ -53,7 +53,7 @@ The `fastmcp.json` file has three main sections, each controlling a different as ```json { - "$schema": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "$schema": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "entrypoint": { "file": "server.py", "object": "mcp" @@ -261,7 +261,7 @@ A minimal configuration for a simple server: ```json { - "$schema": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "$schema": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "entrypoint": { "file": "server.py", "object": "mcp" @@ -276,7 +276,7 @@ A configuration optimized for local development: ```json { - "$schema": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "$schema": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "entrypoint": "src/server.py:app", "environment": { "python": "3.12", @@ -302,7 +302,7 @@ A production-ready configuration with full dependency management: ```json { - "$schema": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "$schema": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "entrypoint": { "file": "app/main.py", "object": "mcp_server" @@ -335,7 +335,7 @@ Configuration for a data analysis server with scientific packages: ```json { - "$schema": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "$schema": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "entrypoint": { "file": "analysis_server.py", "object": "mcp" @@ -367,7 +367,7 @@ You can maintain multiple configuration files for different environments: **dev.fastmcp.json**: ```json { - "$schema": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "$schema": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "entrypoint": { "file": "server.py", "object": "mcp" @@ -382,7 +382,7 @@ You can maintain multiple configuration files for different environments: **prod.fastmcp.json**: ```json { - "$schema": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "$schema": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "entrypoint": { "file": "server.py", "object": "mcp" @@ -515,7 +515,7 @@ uv run --with pandas --with requests \ **Equivalent fastmcp.json**: ```json { - "$schema": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "$schema": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "entrypoint": { "file": "server.py", "object": "mcp" diff --git a/docs/integrations/claude-code.mdx b/docs/integrations/claude-code.mdx index 62e0ef29a..2a66c8f22 100644 --- a/docs/integrations/claude-code.mdx +++ b/docs/integrations/claude-code.mdx @@ -85,7 +85,7 @@ Alternatively, you can use a `fastmcp.json` configuration file (recommended): ```json fastmcp.json { - "$schema": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "$schema": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "entrypoint": { "file": "server.py", "object": "mcp" diff --git a/docs/integrations/claude-desktop.mdx b/docs/integrations/claude-desktop.mdx index 20c42d93d..baa7bc47e 100644 --- a/docs/integrations/claude-desktop.mdx +++ b/docs/integrations/claude-desktop.mdx @@ -102,7 +102,7 @@ Alternatively, you can use a `fastmcp.json` configuration file (recommended): ```json fastmcp.json { - "$schema": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "$schema": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "entrypoint": { "file": "server.py", "object": "mcp" diff --git a/docs/integrations/cursor.mdx b/docs/integrations/cursor.mdx index b648aee48..329047011 100644 --- a/docs/integrations/cursor.mdx +++ b/docs/integrations/cursor.mdx @@ -103,7 +103,7 @@ Alternatively, you can use a `fastmcp.json` configuration file (recommended): ```json fastmcp.json { - "$schema": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "$schema": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "entrypoint": { "file": "server.py", "object": "mcp" diff --git a/docs/integrations/mcp-json-configuration.mdx b/docs/integrations/mcp-json-configuration.mdx index 654d6b041..394687d0a 100644 --- a/docs/integrations/mcp-json-configuration.mdx +++ b/docs/integrations/mcp-json-configuration.mdx @@ -178,7 +178,7 @@ You can also use a `fastmcp.json` configuration file (recommended): ```json fastmcp.json { - "$schema": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "$schema": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "entrypoint": { "file": "server.py", "object": "mcp" diff --git a/docs/public/schemas/fastmcp-json/latest.json b/docs/public/schemas/fastmcp-json/latest.json new file mode 100644 index 000000000..db5b8650e --- /dev/null +++ b/docs/public/schemas/fastmcp-json/latest.json @@ -0,0 +1,296 @@ +{ + "$defs": { + "DeploymentConfig": { + "description": "Configuration for server deployment and runtime settings.", + "properties": { + "transport": { + "anyOf": [ + { + "enum": ["stdio", "http", "sse"], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Transport protocol to use", + "title": "Transport" + }, + "host": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Host to bind to when using HTTP transport", + "examples": ["127.0.0.1", "0.0.0.0", "localhost"], + "title": "Host" + }, + "port": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Port to bind to when using HTTP transport", + "examples": [8000, 3000, 5000], + "title": "Port" + }, + "path": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "URL path for the server endpoint", + "examples": ["/mcp/", "/api/mcp/", "/sse/"], + "title": "Path" + }, + "log_level": { + "anyOf": [ + { + "enum": ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Log level for the server", + "title": "Log Level" + }, + "cwd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Working directory for the server process", + "examples": [".", "./src", "/app"], + "title": "Cwd" + }, + "env": { + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Environment variables to set when running the server", + "examples": [ + { + "API_KEY": "secret", + "DEBUG": "true" + } + ], + "title": "Env" + }, + "args": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Arguments to pass to the server (after --)", + "examples": [["--config", "config.json", "--debug"]], + "title": "Args" + } + }, + "title": "DeploymentConfig", + "type": "object" + }, + "EntrypointConfig": { + "description": "Configuration for server entrypoint when using object format.", + "properties": { + "file": { + "description": "Path to Python file containing the server", + "examples": ["server.py", "src/server.py", "app/main.py"], + "title": "File", + "type": "string" + }, + "object": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Name of the server object in the file (defaults to searching for mcp/server/app)", + "examples": ["app", "mcp", "server"], + "title": "Object" + }, + "repo": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Git repository URL", + "examples": ["https://github.com/user/repo"], + "title": "Repo" + } + }, + "required": ["file"], + "title": "EntrypointConfig", + "type": "object" + }, + "EnvironmentConfig": { + "description": "Configuration for Python environment setup.", + "properties": { + "python": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Python version constraint", + "examples": ["3.10", "3.11", "3.12"], + "title": "Python" + }, + "dependencies": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Python packages to install with PEP 508 specifiers", + "examples": [["fastmcp>=2.0,<3", "httpx", "pandas>=2.0"]], + "title": "Dependencies" + }, + "requirements": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Path to requirements.txt file", + "examples": ["requirements.txt", "../requirements/prod.txt"], + "title": "Requirements" + }, + "project": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Path to project directory containing pyproject.toml", + "examples": [".", "../my-project"], + "title": "Project" + }, + "editable": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Directory to install in editable mode", + "examples": [".", "../my-package"], + "title": "Editable" + } + }, + "title": "EnvironmentConfig", + "type": "object" + } + }, + "description": "Configuration file for FastMCP servers", + "properties": { + "$schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", + "description": "JSON schema for IDE support and validation", + "title": "$Schema" + }, + "entrypoint": { + "$ref": "#/$defs/EntrypointConfig", + "description": "Server entrypoint as a string (file or file:object) or object with file/object/repo", + "examples": [ + "server.py", + "server.py:app", + { + "file": "src/server.py", + "object": "app" + } + ] + }, + "environment": { + "$ref": "#/$defs/EnvironmentConfig", + "description": "Python environment setup configuration" + }, + "deployment": { + "$ref": "#/$defs/DeploymentConfig", + "description": "Server deployment and runtime settings" + } + }, + "required": ["entrypoint"], + "title": "FastMCP Configuration", + "type": "object", + "$id": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json" +} diff --git a/docs/public/schemas/fastmcp-json/v1.json b/docs/public/schemas/fastmcp-json/v1.json new file mode 100644 index 000000000..db5b8650e --- /dev/null +++ b/docs/public/schemas/fastmcp-json/v1.json @@ -0,0 +1,296 @@ +{ + "$defs": { + "DeploymentConfig": { + "description": "Configuration for server deployment and runtime settings.", + "properties": { + "transport": { + "anyOf": [ + { + "enum": ["stdio", "http", "sse"], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Transport protocol to use", + "title": "Transport" + }, + "host": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Host to bind to when using HTTP transport", + "examples": ["127.0.0.1", "0.0.0.0", "localhost"], + "title": "Host" + }, + "port": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Port to bind to when using HTTP transport", + "examples": [8000, 3000, 5000], + "title": "Port" + }, + "path": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "URL path for the server endpoint", + "examples": ["/mcp/", "/api/mcp/", "/sse/"], + "title": "Path" + }, + "log_level": { + "anyOf": [ + { + "enum": ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Log level for the server", + "title": "Log Level" + }, + "cwd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Working directory for the server process", + "examples": [".", "./src", "/app"], + "title": "Cwd" + }, + "env": { + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Environment variables to set when running the server", + "examples": [ + { + "API_KEY": "secret", + "DEBUG": "true" + } + ], + "title": "Env" + }, + "args": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Arguments to pass to the server (after --)", + "examples": [["--config", "config.json", "--debug"]], + "title": "Args" + } + }, + "title": "DeploymentConfig", + "type": "object" + }, + "EntrypointConfig": { + "description": "Configuration for server entrypoint when using object format.", + "properties": { + "file": { + "description": "Path to Python file containing the server", + "examples": ["server.py", "src/server.py", "app/main.py"], + "title": "File", + "type": "string" + }, + "object": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Name of the server object in the file (defaults to searching for mcp/server/app)", + "examples": ["app", "mcp", "server"], + "title": "Object" + }, + "repo": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Git repository URL", + "examples": ["https://github.com/user/repo"], + "title": "Repo" + } + }, + "required": ["file"], + "title": "EntrypointConfig", + "type": "object" + }, + "EnvironmentConfig": { + "description": "Configuration for Python environment setup.", + "properties": { + "python": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Python version constraint", + "examples": ["3.10", "3.11", "3.12"], + "title": "Python" + }, + "dependencies": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Python packages to install with PEP 508 specifiers", + "examples": [["fastmcp>=2.0,<3", "httpx", "pandas>=2.0"]], + "title": "Dependencies" + }, + "requirements": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Path to requirements.txt file", + "examples": ["requirements.txt", "../requirements/prod.txt"], + "title": "Requirements" + }, + "project": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Path to project directory containing pyproject.toml", + "examples": [".", "../my-project"], + "title": "Project" + }, + "editable": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Directory to install in editable mode", + "examples": [".", "../my-package"], + "title": "Editable" + } + }, + "title": "EnvironmentConfig", + "type": "object" + } + }, + "description": "Configuration file for FastMCP servers", + "properties": { + "$schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", + "description": "JSON schema for IDE support and validation", + "title": "$Schema" + }, + "entrypoint": { + "$ref": "#/$defs/EntrypointConfig", + "description": "Server entrypoint as a string (file or file:object) or object with file/object/repo", + "examples": [ + "server.py", + "server.py:app", + { + "file": "src/server.py", + "object": "app" + } + ] + }, + "environment": { + "$ref": "#/$defs/EnvironmentConfig", + "description": "Python environment setup configuration" + }, + "deployment": { + "$ref": "#/$defs/DeploymentConfig", + "description": "Server deployment and runtime settings" + } + }, + "required": ["entrypoint"], + "title": "FastMCP Configuration", + "type": "object", + "$id": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json" +} diff --git a/examples/atproto_mcp/fastmcp.json b/examples/atproto_mcp/fastmcp.json index 96b93bd1f..0cab8397d 100644 --- a/examples/atproto_mcp/fastmcp.json +++ b/examples/atproto_mcp/fastmcp.json @@ -1,9 +1,9 @@ { - "$schema": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "$schema": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "entrypoint": "src/atproto_mcp/server.py", "environment": { "dependencies": [ "atproto_mcp@git+https://github.com/jlowin/fastmcp.git#subdirectory=examples/atproto_mcp" ] } -} \ No newline at end of file +} diff --git a/examples/fastmcp_config/env_interpolation_example.json b/examples/fastmcp_config/env_interpolation_example.json index 9b49c831b..0eb4af048 100644 --- a/examples/fastmcp_config/env_interpolation_example.json +++ b/examples/fastmcp_config/env_interpolation_example.json @@ -1,5 +1,5 @@ { - "$schema": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "$schema": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "entrypoint": "src/server.py:app", "environment": { "python": "3.12", @@ -17,4 +17,4 @@ "FEATURE_FLAGS": "${FEATURE_FLAGS}" } } -} \ No newline at end of file +} diff --git a/examples/fastmcp_config/full_example.fastmcp.json b/examples/fastmcp_config/full_example.fastmcp.json index 9212903b7..98126fcf5 100644 --- a/examples/fastmcp_config/full_example.fastmcp.json +++ b/examples/fastmcp_config/full_example.fastmcp.json @@ -1,15 +1,12 @@ { - "$schema": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "$schema": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "entrypoint": { "file": "server.py", "object": "mcp" }, "environment": { "python": "3.12", - "dependencies": [ - "requests>=2.31.0", - "httpx" - ], + "dependencies": ["requests>=2.31.0", "httpx"], "requirements": null, "project": null, "editable": null @@ -27,4 +24,4 @@ "cwd": null, "args": null } -} \ No newline at end of file +} diff --git a/examples/fastmcp_config_demo/fastmcp.json b/examples/fastmcp_config_demo/fastmcp.json index 022216c43..79b51973e 100644 --- a/examples/fastmcp_config_demo/fastmcp.json +++ b/examples/fastmcp_config_demo/fastmcp.json @@ -1,15 +1,12 @@ { - "$schema": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "$schema": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "entrypoint": "server.py", "environment": { "python": "3.11", - "dependencies": [ - "pyautogui", - "Pillow" - ] + "dependencies": ["pyautogui", "Pillow"] }, "deployment": { "transport": "stdio", "log_level": "INFO" } -} \ No newline at end of file +} diff --git a/examples/memory.fastmcp.json b/examples/memory.fastmcp.json index d92f97872..5ee1aea97 100644 --- a/examples/memory.fastmcp.json +++ b/examples/memory.fastmcp.json @@ -1,12 +1,7 @@ { - "$schema": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "$schema": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "entrypoint": "memory.py", "environment": { - "dependencies": [ - "pydantic-ai-slim[openai]", - "asyncpg", - "numpy", - "pgvector" - ] + "dependencies": ["pydantic-ai-slim[openai]", "asyncpg", "numpy", "pgvector"] } -} \ No newline at end of file +} diff --git a/examples/mount_example.fastmcp.json b/examples/mount_example.fastmcp.json index 7ad9e3c00..d30d2e3e9 100644 --- a/examples/mount_example.fastmcp.json +++ b/examples/mount_example.fastmcp.json @@ -1,4 +1,4 @@ { - "$schema": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "$schema": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "entrypoint": "mount_example.py" -} \ No newline at end of file +} diff --git a/examples/screenshot.fastmcp.json b/examples/screenshot.fastmcp.json index ef35e6fdd..9ff06d797 100644 --- a/examples/screenshot.fastmcp.json +++ b/examples/screenshot.fastmcp.json @@ -1,7 +1,7 @@ { - "$schema": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "$schema": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "entrypoint": "screenshot.py", "environment": { "dependencies": ["pyautogui", "Pillow"] } -} \ No newline at end of file +} diff --git a/examples/smart_home/hub.fastmcp.json b/examples/smart_home/hub.fastmcp.json index 175c8961c..3e84fc8c6 100644 --- a/examples/smart_home/hub.fastmcp.json +++ b/examples/smart_home/hub.fastmcp.json @@ -1,9 +1,9 @@ { - "$schema": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "$schema": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "entrypoint": "src/smart_home/hub.py", "environment": { "dependencies": [ "smart_home@git+https://github.com/jlowin/fastmcp.git#subdirectory=examples/smart_home" ] } -} \ No newline at end of file +} diff --git a/examples/smart_home/lights.fastmcp.json b/examples/smart_home/lights.fastmcp.json index 27bba2a06..23b0b3176 100644 --- a/examples/smart_home/lights.fastmcp.json +++ b/examples/smart_home/lights.fastmcp.json @@ -1,9 +1,9 @@ { - "$schema": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "$schema": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "entrypoint": "src/smart_home/lights/server.py", "environment": { "dependencies": [ "smart_home@git+https://github.com/jlowin/fastmcp.git#subdirectory=examples/smart_home" ] } -} \ No newline at end of file +} diff --git a/src/fastmcp/utilities/fastmcp_config/v1/fastmcp_config.py b/src/fastmcp/utilities/fastmcp_config/v1/fastmcp_config.py index aeb1dac38..458895a6b 100644 --- a/src/fastmcp/utilities/fastmcp_config/v1/fastmcp_config.py +++ b/src/fastmcp/utilities/fastmcp_config/v1/fastmcp_config.py @@ -20,7 +20,7 @@ from fastmcp.utilities.logging import get_logger logger = get_logger("cli.config") # JSON Schema for IDE support -FASTMCP_JSON_SCHEMA = "https://gofastmcp.com/schemas/fastmcp_config/v1.json" +FASTMCP_JSON_SCHEMA = "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json" class EntrypointConfig(BaseModel): @@ -324,7 +324,7 @@ class FastMCPConfig(BaseModel): # Schema field for IDE support schema_: str | None = Field( - default="https://gofastmcp.com/schemas/fastmcp_config/v1.json", + default="https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", alias="$schema", description="JSON schema for IDE support and validation", ) diff --git a/src/fastmcp/utilities/fastmcp_config/v1/schema.json b/src/fastmcp/utilities/fastmcp_config/v1/schema.json index a7c98df6e..db5b8650e 100644 --- a/src/fastmcp/utilities/fastmcp_config/v1/schema.json +++ b/src/fastmcp/utilities/fastmcp_config/v1/schema.json @@ -6,11 +6,7 @@ "transport": { "anyOf": [ { - "enum": [ - "stdio", - "http", - "sse" - ], + "enum": ["stdio", "http", "sse"], "type": "string" }, { @@ -32,11 +28,7 @@ ], "default": null, "description": "Host to bind to when using HTTP transport", - "examples": [ - "127.0.0.1", - "0.0.0.0", - "localhost" - ], + "examples": ["127.0.0.1", "0.0.0.0", "localhost"], "title": "Host" }, "port": { @@ -50,11 +42,7 @@ ], "default": null, "description": "Port to bind to when using HTTP transport", - "examples": [ - 8000, - 3000, - 5000 - ], + "examples": [8000, 3000, 5000], "title": "Port" }, "path": { @@ -68,23 +56,13 @@ ], "default": null, "description": "URL path for the server endpoint", - "examples": [ - "/mcp/", - "/api/mcp/", - "/sse/" - ], + "examples": ["/mcp/", "/api/mcp/", "/sse/"], "title": "Path" }, "log_level": { "anyOf": [ { - "enum": [ - "DEBUG", - "INFO", - "WARNING", - "ERROR", - "CRITICAL" - ], + "enum": ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"], "type": "string" }, { @@ -106,11 +84,7 @@ ], "default": null, "description": "Working directory for the server process", - "examples": [ - ".", - "./src", - "/app" - ], + "examples": [".", "./src", "/app"], "title": "Cwd" }, "env": { @@ -149,13 +123,7 @@ ], "default": null, "description": "Arguments to pass to the server (after --)", - "examples": [ - [ - "--config", - "config.json", - "--debug" - ] - ], + "examples": [["--config", "config.json", "--debug"]], "title": "Args" } }, @@ -167,11 +135,7 @@ "properties": { "file": { "description": "Path to Python file containing the server", - "examples": [ - "server.py", - "src/server.py", - "app/main.py" - ], + "examples": ["server.py", "src/server.py", "app/main.py"], "title": "File", "type": "string" }, @@ -186,11 +150,7 @@ ], "default": null, "description": "Name of the server object in the file (defaults to searching for mcp/server/app)", - "examples": [ - "app", - "mcp", - "server" - ], + "examples": ["app", "mcp", "server"], "title": "Object" }, "repo": { @@ -204,15 +164,11 @@ ], "default": null, "description": "Git repository URL", - "examples": [ - "https://github.com/user/repo" - ], + "examples": ["https://github.com/user/repo"], "title": "Repo" } }, - "required": [ - "file" - ], + "required": ["file"], "title": "EntrypointConfig", "type": "object" }, @@ -230,11 +186,7 @@ ], "default": null, "description": "Python version constraint", - "examples": [ - "3.10", - "3.11", - "3.12" - ], + "examples": ["3.10", "3.11", "3.12"], "title": "Python" }, "dependencies": { @@ -251,13 +203,7 @@ ], "default": null, "description": "Python packages to install with PEP 508 specifiers", - "examples": [ - [ - "fastmcp>=2.0,<3", - "httpx", - "pandas>=2.0" - ] - ], + "examples": [["fastmcp>=2.0,<3", "httpx", "pandas>=2.0"]], "title": "Dependencies" }, "requirements": { @@ -271,10 +217,7 @@ ], "default": null, "description": "Path to requirements.txt file", - "examples": [ - "requirements.txt", - "../requirements/prod.txt" - ], + "examples": ["requirements.txt", "../requirements/prod.txt"], "title": "Requirements" }, "project": { @@ -288,10 +231,7 @@ ], "default": null, "description": "Path to project directory containing pyproject.toml", - "examples": [ - ".", - "../my-project" - ], + "examples": [".", "../my-project"], "title": "Project" }, "editable": { @@ -305,10 +245,7 @@ ], "default": null, "description": "Directory to install in editable mode", - "examples": [ - ".", - "../my-package" - ], + "examples": [".", "../my-package"], "title": "Editable" } }, @@ -327,7 +264,7 @@ "type": "null" } ], - "default": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "default": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "description": "JSON schema for IDE support and validation", "title": "$Schema" }, @@ -352,10 +289,8 @@ "description": "Server deployment and runtime settings" } }, - "required": [ - "entrypoint" - ], + "required": ["entrypoint"], "title": "FastMCP Configuration", "type": "object", - "$id": "https://gofastmcp.com/schemas/fastmcp_config/v1.json" -} \ No newline at end of file + "$id": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json" +} diff --git a/tests/cli/test_config.py b/tests/cli/test_config.py index 707bc226a..d8ad92b73 100644 --- a/tests/cli/test_config.py +++ b/tests/cli/test_config.py @@ -365,7 +365,7 @@ class TestFastMCPConfig: def test_from_file(self, tmp_path): """Test loading config from JSON file with nested structure.""" config_data = { - "$schema": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "$schema": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "entrypoint": {"file": "src/server.py", "object": "app"}, "environment": {"python": "3.12", "dependencies": ["requests"]}, "deployment": {"transport": "http", "port": 8000}, diff --git a/tests/cli/test_fastmcp_config_integration.py b/tests/cli/test_fastmcp_config_integration.py index 01b305d89..758661ab2 100644 --- a/tests/cli/test_fastmcp_config_integration.py +++ b/tests/cli/test_fastmcp_config_integration.py @@ -37,7 +37,7 @@ if __name__ == "__main__": # Create config file config_data = { - "$schema": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "$schema": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "entrypoint": "server.py", "environment": { "python": sys.version.split()[0], # Use current Python version diff --git a/tests/cli/test_fastmcp_config_schema.py b/tests/cli/test_fastmcp_config_schema.py index f2ac44672..133a52eaa 100644 --- a/tests/cli/test_fastmcp_config_schema.py +++ b/tests/cli/test_fastmcp_config_schema.py @@ -43,7 +43,7 @@ def test_schema_has_correct_id(): assert "$id" in generated_schema assert ( generated_schema["$id"] - == "https://gofastmcp.com/schemas/fastmcp_config/v1.json" + == "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json" ) diff --git a/tests/cli/test_run_config.py b/tests/cli/test_run_config.py index f0e444c8a..50bed5136 100644 --- a/tests/cli/test_run_config.py +++ b/tests/cli/test_run_config.py @@ -18,7 +18,7 @@ from fastmcp.utilities.fastmcp_config import ( def sample_config(tmp_path): """Create a sample fastmcp.json configuration file with nested structure.""" config_data = { - "$schema": "https://gofastmcp.com/schemas/fastmcp_config/v1.json", + "$schema": "https://gofastmcp.com/public/schemas/fastmcp.json/v1.json", "entrypoint": "server.py", "environment": {"python": "3.11", "dependencies": ["requests"]}, "deployment": {"transport": "stdio", "env": {"TEST_VAR": "test_value"}},