#
tokens: 1723/50000 4/4 files
lines: on (toggle) GitHub
raw markdown copy reset
# 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
 1 | services:
 2 |   mcp-server:
 3 |     build:
 4 |       context: .
 5 |       dockerfile: Dockerfile
 6 |     ports:
 7 |       - "${MCP_PORT}:${MCP_PORT}"
 8 |     environment:
 9 |       - NODE_ENV=production
10 |       - PORT=${MCP_PORT}
11 |       - TRANSLATION_API_KEY=${TRANSLATION_API_KEY}
12 |       - TRANSLATION_MODEL=${TRANSLATION_MODEL}
13 |       - TRANSLATION_BASE_URL=${TRANSLATION_BASE_URL}
14 |     restart: always
15 | 
```

--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------

```json
 1 | {
 2 |   "compilerOptions": {
 3 |     "target": "ES2020",
 4 |     "module": "NodeNext",
 5 |     "moduleResolution": "NodeNext",
 6 |     "esModuleInterop": true,
 7 |     "strict": true,
 8 |     "skipLibCheck": true,
 9 |     "forceConsistentCasingInFileNames": true,
10 |     "outDir": "./dist",
11 |     "declaration": true,
12 |     "sourceMap": true,
13 |     "resolveJsonModule": true
14 |   },
15 |   "include": [
16 |     "src/**/*"
17 |   ],
18 |   "exclude": [
19 |     "node_modules",
20 |     "dist"
21 |   ]
22 | } 
```

--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------

```json
 1 | {
 2 |   "name": "airylark-mcp-server",
 3 |   "version": "0.1.0",
 4 |   "main": "dist/index.js",
 5 |   "description": "AiryLark的ModelContextProtocol(MCP)服务器,提供高精度翻译API",
 6 |   "license": "SEE LICENSE IN ../LICENSE",
 7 |   "author": "AiryLark Team",
 8 |   "repository": {
 9 |     "type": "git",
10 |     "url": "https://github.com/wizd/airylark.git",
11 |     "directory": "mcp-server"
12 |   },
13 |   "keywords": [
14 |     "mcp",
15 |     "translation",
16 |     "openai",
17 |     "api",
18 |     "airylark"
19 |   ],
20 |   "scripts": {
21 |     "build": "tsc",
22 |     "start": "node dist/index.js",
23 |     "dev": "node --loader ts-node/esm src/index.ts",
24 |     "lint": "eslint src/**/*.ts",
25 |     "test": "jest",
26 |     "clean": "rimraf dist",
27 |     "prebuild": "npm run clean"
28 |   },
29 |   "dependencies": {
30 |     "@chatmcp/sdk": "^1.0.5",
31 |     "@modelcontextprotocol/sdk": "^1.8.0",
32 |     "dotenv": "^16.4.7",
33 |     "express": "^5.1.0",
34 |     "node-fetch": "^3.3.2",
35 |     "zod": "^3.24.2"
36 |   },
37 |   "devDependencies": {
38 |     "@types/express": "^5.0.1",
39 |     "@types/node": "^20",
40 |     "eslint": "^9",
41 |     "jest": "^29.7.0",
42 |     "rimraf": "^5.0.5",
43 |     "ts-jest": "^29.1.2",
44 |     "ts-node": "^10.9.2",
45 |     "typescript": "^5"
46 |   },
47 |   "engines": {
48 |     "node": ">=18.0.0"
49 |   },
50 |   "type": "module"
51 | }
52 | 
```

--------------------------------------------------------------------------------
/chatmcp.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | params:
 2 |   type: object
 3 |   properties:
 4 |     TRANSLATION_API_KEY:
 5 |       type: string
 6 |       description: API密钥,用于翻译服务
 7 |     TRANSLATION_BASE_URL:
 8 |       type: string
 9 |       description: 翻译API基础URL
10 |       default: "https://api.openai.com/v1"
11 |     TRANSLATION_MODEL:
12 |       type: string
13 |       description: 翻译使用的模型名称
14 |       default: "gpt-4o"
15 |   required:
16 |     - TRANSLATION_API_KEY
17 | 
18 | rest:
19 |   name: translation-server
20 |   port: 3031
21 |   endpoint: /api
22 | 
23 | npx:
24 |   command:
25 |     | TRANSLATION_API_KEY={TRANSLATION_API_KEY} TRANSLATION_BASE_URL={TRANSLATION_BASE_URL} TRANSLATION_MODEL={TRANSLATION_MODEL} npx -y server-translation-mcp --mode=rest
26 |   config:
27 |     | {
28 |         "mcpServers": {
29 |           "translation-server": {
30 |             "command": "npx",
31 |             "args": [
32 |               "-y",
33 |               "server-translation-mcp",
34 |               "--mode=rest"
35 |             ],
36 |             "env": {
37 |               "TRANSLATION_API_KEY": "YOUR_API_KEY_HERE",
38 |               "TRANSLATION_BASE_URL": "https://api.openai.com/v1",
39 |               "TRANSLATION_MODEL": "gpt-4o"
40 |             }
41 |           }
42 |         }
43 |       }
44 | 
45 | docker:
46 |   command:
47 |     | 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
48 |   config:
49 |     | {
50 |         "mcpServers": {
51 |           "translation-server": {
52 |             "command": "docker",
53 |             "args": [
54 |               "run",
55 |               "-i",
56 |               "--rm",
57 |               "-e",
58 |               "TRANSLATION_API_KEY",
59 |               "-e",
60 |               "TRANSLATION_BASE_URL",
61 |               "-e",
62 |               "TRANSLATION_MODEL",
63 |               "-p",
64 |               "3031:3031",
65 |               "mcp/translation-server"
66 |             ],
67 |             "env": {
68 |               "TRANSLATION_API_KEY": "YOUR_API_KEY_HERE",
69 |               "TRANSLATION_BASE_URL": "https://api.openai.com/v1",
70 |               "TRANSLATION_MODEL": "gpt-4o"
71 |             }
72 |           }
73 |         }
74 |       } 
```