This repository is organized for both custom MCP server source code and reusable deployment definitions.
deployments/
github-mcp/
.env.example
mcp-client.json
test-stdio.ps1
playwright-mcp/
mcp-client.json
test-stdio.ps1
scripts/
demo_load_mcp_servers.py
list_github_mcp_tools.py
test_github_mcp_stdio.py
test_playwright_mcp_stdio.py
Use deployments/<server-name>/ for MCP server deployment notes, client config templates, and local smoke tests. Keep custom MCP server source code in a normal package directory, then add its deployment files under deployments/<server-name>/.
Use deployments/mcp.local.yaml for the local personal-assistant MCP stack.
The shape is intentionally small and mirrors common Codex/OpenCode stdio
configuration patterns:
mcpServers:
name:
type: stdio
command: "program"
args: ["arg1", "arg2"]
env_files: [".env"]
env:
KEY: "value"
required_env: ["KEY"]Run the local demo:
.venv\Scripts\python.exe scripts\demo_load_mcp_servers.pyThe script starts every enabled server in the YAML file, sends MCP
initialize, lists tools with tools/list, then calls one sample tool for
FRED and one sample tool for GitHub.
Use the existing local image directly:
docker.xuanyuan.run/mcp/github:latest
Create a local environment file:
Copy-Item deployments/github-mcp/.env.example deployments/github-mcp/.envSet GITHUB_PERSONAL_ACCESS_TOKEN in deployments/github-mcp/.env.
For a fine-grained GitHub personal access token, grant access only to the repositories this MCP server should operate on. For reading repository files, grant repository Contents read permission. Add issue, pull request, or contents write permissions only if you need the corresponding write tools.
The GitHub MCP server runs over stdio, so it is normally launched by an MCP client instead of being kept as a long-running HTTP service. Use deployments/github-mcp/mcp-client.json as a client configuration template.
Smoke test:
python scripts/test_github_mcp_stdio.pyThe Python smoke test starts the Docker container, sends initialize and tools/list over stdin, then prints the JSON-RPC responses from stdout.
List all GitHub MCP tools and input parameters:
python scripts/list_github_mcp_tools.pyTest reading a repository file:
python scripts/test_github_mcp_stdio.py --owner modelcontextprotocol --repo servers --path README.mdUse the existing local image directly:
docker.xuanyuan.run/mcp/playwright:latest
The Playwright MCP server runs over stdio and launches a browser from the container. Use deployments/playwright-mcp/mcp-client.json as a client configuration template.
Smoke test:
python scripts/test_playwright_mcp_stdio.py --summaryThe Python smoke test starts the Docker container, sends initialize and tools/list, then calls browser_navigate and browser_evaluate to open a Google search page and read back the page title, URL, and a short text excerpt.
Test a different Google query:
python scripts/test_playwright_mcp_stdio.py --query "fastmcp github" --summary