# Directory Structure ``` ├── .env.example ├── .gitignore ├── chatmcp.yaml ├── docker-compose.yml ├── Dockerfile ├── LICENSE ├── package-lock.json ├── package.json ├── README.md ├── src │ ├── index.ts │ ├── text_eval.ts │ └── utils.ts └── tsconfig.json ``` # Files -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- ```yaml services: mcp-server: build: context: . dockerfile: Dockerfile ports: - "${MCP_PORT}:${MCP_PORT}" environment: - NODE_ENV=production - PORT=${MCP_PORT} - TRANSLATION_API_KEY=${TRANSLATION_API_KEY} - TRANSLATION_MODEL=${TRANSLATION_MODEL} - TRANSLATION_BASE_URL=${TRANSLATION_BASE_URL} restart: always ``` -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- ```json { "compilerOptions": { "target": "ES2020", "module": "NodeNext", "moduleResolution": "NodeNext", "esModuleInterop": true, "strict": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "outDir": "./dist", "declaration": true, "sourceMap": true, "resolveJsonModule": true }, "include": [ "src/**/*" ], "exclude": [ "node_modules", "dist" ] } ``` -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- ```json { "name": "airylark-mcp-server", "version": "0.1.0", "main": "dist/index.js", "description": "AiryLark的ModelContextProtocol(MCP)服务器,提供高精度翻译API", "license": "SEE LICENSE IN ../LICENSE", "author": "AiryLark Team", "repository": { "type": "git", "url": "https://github.com/wizd/airylark.git", "directory": "mcp-server" }, "keywords": [ "mcp", "translation", "openai", "api", "airylark" ], "scripts": { "build": "tsc", "start": "node dist/index.js", "dev": "node --loader ts-node/esm src/index.ts", "lint": "eslint src/**/*.ts", "test": "jest", "clean": "rimraf dist", "prebuild": "npm run clean" }, "dependencies": { "@chatmcp/sdk": "^1.0.5", "@modelcontextprotocol/sdk": "^1.8.0", "dotenv": "^16.4.7", "express": "^5.1.0", "node-fetch": "^3.3.2", "zod": "^3.24.2" }, "devDependencies": { "@types/express": "^5.0.1", "@types/node": "^20", "eslint": "^9", "jest": "^29.7.0", "rimraf": "^5.0.5", "ts-jest": "^29.1.2", "ts-node": "^10.9.2", "typescript": "^5" }, "engines": { "node": ">=18.0.0" }, "type": "module" } ``` -------------------------------------------------------------------------------- /chatmcp.yaml: -------------------------------------------------------------------------------- ```yaml params: type: object properties: TRANSLATION_API_KEY: type: string description: API密钥,用于翻译服务 TRANSLATION_BASE_URL: type: string description: 翻译API基础URL default: "https://api.openai.com/v1" TRANSLATION_MODEL: type: string description: 翻译使用的模型名称 default: "gpt-4o" required: - TRANSLATION_API_KEY rest: name: translation-server port: 3031 endpoint: /api npx: command: | TRANSLATION_API_KEY={TRANSLATION_API_KEY} TRANSLATION_BASE_URL={TRANSLATION_BASE_URL} TRANSLATION_MODEL={TRANSLATION_MODEL} npx -y server-translation-mcp --mode=rest config: | { "mcpServers": { "translation-server": { "command": "npx", "args": [ "-y", "server-translation-mcp", "--mode=rest" ], "env": { "TRANSLATION_API_KEY": "YOUR_API_KEY_HERE", "TRANSLATION_BASE_URL": "https://api.openai.com/v1", "TRANSLATION_MODEL": "gpt-4o" } } } } docker: command: | docker run -i --rm -e TRANSLATION_API_KEY={TRANSLATION_API_KEY} -e TRANSLATION_BASE_URL={TRANSLATION_BASE_URL} -e TRANSLATION_MODEL={TRANSLATION_MODEL} -p 3031:3031 mcp/translation-server config: | { "mcpServers": { "translation-server": { "command": "docker", "args": [ "run", "-i", "--rm", "-e", "TRANSLATION_API_KEY", "-e", "TRANSLATION_BASE_URL", "-e", "TRANSLATION_MODEL", "-p", "3031:3031", "mcp/translation-server" ], "env": { "TRANSLATION_API_KEY": "YOUR_API_KEY_HERE", "TRANSLATION_BASE_URL": "https://api.openai.com/v1", "TRANSLATION_MODEL": "gpt-4o" } } } } ```