随机数服务器
   
MCP服务器使用国家天气数据作为种子生成随机数。
构建说明
地方发展建设
# Install uv if not already installed
curl -LsSf https://astral.sh/uv/install.sh | sh
# Clone the repository
git clone https://github.com/nobelk/random-number-server.git
cd random-number-server
# Install dependencies and build the project
uv sync
# Install in editable mode for development
uv pip install -e .Docker构建
# Build the Docker image
docker build -t random-number-server:latest .
# Or use Docker Compose to build
docker-compose build快速开始
使用Docker Compose(推荐)
# Build and run the server
docker-compose up -d
# View logs
docker-compose logs -f
# Stop the server
docker-compose down直接使用uv
# Install dependencies
uv sync
# Run the server
uv run src/random_server.py单元测试
该项目包括对两个核心模块进行全面的单元测试,代码覆盖率为86%。
运行测试
# Install dependencies
uv sync
# Run all tests
uv run pytest
# Run tests with verbose output
uv run pytest -v
# Run tests with coverage report
uv run pytest --cov=src --cov-report=term-missing
# Run specific test files
uv run pytest tests/test_random_number_generator.py
uv run pytest tests/test_random_server.py测试覆盖率
- src/RandomNumberGenerator.py:83%的覆盖率(13次测试)
- src/random_server.py:92%的覆盖率(17次测试)
- 总计:86%的覆盖率(30次测试)
测试包括:
- 初始化及配置
- 随机数生成算法
- 天气API集成
- 错误处理和边缘情况
- FastMCP工具注册和执行
- 并发请求处理
Docker设置
该项目包括Docker和Docker Compose配置,便于部署。
Docker镜像
- 基地: Python 3.13 Alpine(针对大小进行了优化)
- 尺寸: ~110MB
- 安全: 以非root用户身份运行
- 构建: 多阶段构建以实现优化
Docker Compose
# Production
docker-compose up -d
# Development (with live reload)
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up
# Run tests in container
docker-compose run --rm --entrypoint /app/.venv/bin/python random-server -m pytest看 了解详细的Docker说明。
MCP配置
在本地运行MCP服务器
uv --directory /ABSOLUTE/PATH/TO/PARENT/FOLDER/random-number-server run src/random_server.py配置Claude桌面
编辑 ~/Library/Application\ Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"weather": {
"command": "/Users/Nobel.Khandaker/.pyenv/shims/uv",
"args": [
"--directory",
"/Users/Nobel.Khandaker/sources/random-number-server",
"run",
"src/random_server.py"
]
}
}
}