mcp-server-gemini 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +155 -0
- package/LICENSE +21 -0
- package/README.md +180 -0
- package/dist/config/constants.js +71 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/config/models.js +121 -0
- package/dist/config/models.js.map +1 -0
- package/dist/enhanced-stdio-server.js +1164 -0
- package/dist/enhanced-stdio-server.js.map +1 -0
- package/dist/i18n.js +109 -0
- package/dist/i18n.js.map +1 -0
- package/dist/server.js +251 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/analyze-codebase.js +373 -0
- package/dist/tools/analyze-codebase.js.map +1 -0
- package/dist/tools/analyze-content.js +295 -0
- package/dist/tools/analyze-content.js.map +1 -0
- package/dist/tools/brainstorm.js +237 -0
- package/dist/tools/brainstorm.js.map +1 -0
- package/dist/tools/definitions.js +375 -0
- package/dist/tools/definitions.js.map +1 -0
- package/dist/tools/fix-ui.js +262 -0
- package/dist/tools/fix-ui.js.map +1 -0
- package/dist/tools/generate-ui.js +311 -0
- package/dist/tools/generate-ui.js.map +1 -0
- package/dist/tools/index.js +17 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list-models.js +30 -0
- package/dist/tools/list-models.js.map +1 -0
- package/dist/tools/multimodal-query.js +83 -0
- package/dist/tools/multimodal-query.js.map +1 -0
- package/dist/tools/search.js +94 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/error-handler.js +69 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/file-reader.js +470 -0
- package/dist/utils/file-reader.js.map +1 -0
- package/dist/utils/gemini-client.js +184 -0
- package/dist/utils/gemini-client.js.map +1 -0
- package/dist/utils/security.js +370 -0
- package/dist/utils/security.js.map +1 -0
- package/dist/utils/validators.js +150 -0
- package/dist/utils/validators.js.map +1 -0
- package/dist/windows-utils.js +175 -0
- package/dist/windows-utils.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Windows 平台特定工具函数
|
|
3
|
+
* Windows-specific utility functions
|
|
4
|
+
*/
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import * as fs from 'fs';
|
|
7
|
+
/**
|
|
8
|
+
* 标准化 Windows 路径
|
|
9
|
+
* - 将正斜杠转换为反斜杠
|
|
10
|
+
* - 处理 UNC 路径
|
|
11
|
+
* - 移除多余的分隔符
|
|
12
|
+
* @param filePath 原始路径
|
|
13
|
+
* @returns 标准化的 Windows 路径
|
|
14
|
+
*/
|
|
15
|
+
export function normalizeWindowsPath(filePath) {
|
|
16
|
+
if (!filePath)
|
|
17
|
+
return filePath;
|
|
18
|
+
// 使用 Node.js 内置方法标准化路径
|
|
19
|
+
let normalized = path.normalize(filePath);
|
|
20
|
+
// 确保盘符大写 (C: 而不是 c:)
|
|
21
|
+
if (normalized.length >= 2 && normalized[1] === ':') {
|
|
22
|
+
normalized = normalized[0].toUpperCase() + normalized.slice(1);
|
|
23
|
+
}
|
|
24
|
+
return normalized;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 安全地拼接路径
|
|
28
|
+
* 使用 path.join() 确保跨平台兼容
|
|
29
|
+
* @param paths 路径片段
|
|
30
|
+
* @returns 拼接后的路径
|
|
31
|
+
*/
|
|
32
|
+
export function joinPath(...paths) {
|
|
33
|
+
return path.join(...paths);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 获取绝对路径
|
|
37
|
+
* @param relativePath 相对路径
|
|
38
|
+
* @param basePath 基础路径(可选)
|
|
39
|
+
* @returns 绝对路径
|
|
40
|
+
*/
|
|
41
|
+
export function getAbsolutePath(relativePath, basePath) {
|
|
42
|
+
if (path.isAbsolute(relativePath)) {
|
|
43
|
+
return normalizeWindowsPath(relativePath);
|
|
44
|
+
}
|
|
45
|
+
const base = basePath || process.cwd();
|
|
46
|
+
return normalizeWindowsPath(path.resolve(base, relativePath));
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 检查文件是否存在(支持中文路径)
|
|
50
|
+
* @param filePath 文件路径
|
|
51
|
+
* @returns 文件是否存在
|
|
52
|
+
*/
|
|
53
|
+
export function fileExists(filePath) {
|
|
54
|
+
try {
|
|
55
|
+
const normalized = normalizeWindowsPath(filePath);
|
|
56
|
+
return fs.existsSync(normalized);
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* 安全地读取文件(支持中文路径和自动编码检测)
|
|
64
|
+
* @param filePath 文件路径
|
|
65
|
+
* @param encoding 编码格式,默认 utf-8
|
|
66
|
+
* @returns 文件内容
|
|
67
|
+
*/
|
|
68
|
+
export function readFileSafe(filePath, encoding = 'utf-8') {
|
|
69
|
+
const normalized = normalizeWindowsPath(filePath);
|
|
70
|
+
if (!fileExists(normalized)) {
|
|
71
|
+
throw new Error(`文件不存在: ${normalized}`);
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
return fs.readFileSync(normalized, encoding);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
if (error.code === 'EACCES') {
|
|
78
|
+
throw new Error(`没有权限读取文件: ${normalized}`);
|
|
79
|
+
}
|
|
80
|
+
throw new Error(`读取文件失败: ${error.message}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* 安全地写入文件(支持中文路径)
|
|
85
|
+
* @param filePath 文件路径
|
|
86
|
+
* @param content 文件内容
|
|
87
|
+
* @param encoding 编码格式,默认 utf-8
|
|
88
|
+
*/
|
|
89
|
+
export function writeFileSafe(filePath, content, encoding = 'utf-8') {
|
|
90
|
+
const normalized = normalizeWindowsPath(filePath);
|
|
91
|
+
// 确保目录存在
|
|
92
|
+
const dir = path.dirname(normalized);
|
|
93
|
+
if (!fs.existsSync(dir)) {
|
|
94
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
95
|
+
}
|
|
96
|
+
try {
|
|
97
|
+
// Windows 下使用 CRLF 换行符
|
|
98
|
+
const contentWithCRLF = content.replace(/\n/g, '\r\n');
|
|
99
|
+
fs.writeFileSync(normalized, contentWithCRLF, encoding);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
if (error.code === 'EACCES') {
|
|
103
|
+
throw new Error(`没有权限写入文件: ${normalized}`);
|
|
104
|
+
}
|
|
105
|
+
throw new Error(`写入文件失败: ${error.message}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* 检测路径是否包含中文字符
|
|
110
|
+
* @param filePath 文件路径
|
|
111
|
+
* @returns 是否包含中文
|
|
112
|
+
*/
|
|
113
|
+
export function hasChineseChars(filePath) {
|
|
114
|
+
return /[\u4e00-\u9fa5]/.test(filePath);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* 将 WSL/Git Bash 路径转换为 Windows 路径
|
|
118
|
+
* 例如: /c/Users/... -> C:\Users\...
|
|
119
|
+
* @param posixPath POSIX 风格路径
|
|
120
|
+
* @returns Windows 路径
|
|
121
|
+
*/
|
|
122
|
+
export function convertPosixToWindows(posixPath) {
|
|
123
|
+
if (!posixPath.startsWith('/')) {
|
|
124
|
+
return normalizeWindowsPath(posixPath);
|
|
125
|
+
}
|
|
126
|
+
// 处理 /c/Users/... 格式
|
|
127
|
+
const match = posixPath.match(/^\/([a-z])\/(.*)/i);
|
|
128
|
+
if (match) {
|
|
129
|
+
const drive = match[1].toUpperCase();
|
|
130
|
+
const rest = match[2].replace(/\//g, '\\');
|
|
131
|
+
return `${drive}:\\${rest}`;
|
|
132
|
+
}
|
|
133
|
+
// 其他情况直接标准化
|
|
134
|
+
return normalizeWindowsPath(posixPath);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* 将 Windows 路径转换为 POSIX 路径(用于某些命令行工具)
|
|
138
|
+
* 例如: C:\Users\... -> /c/Users/...
|
|
139
|
+
* @param windowsPath Windows 路径
|
|
140
|
+
* @returns POSIX 风格路径
|
|
141
|
+
*/
|
|
142
|
+
export function convertWindowsToPosix(windowsPath) {
|
|
143
|
+
const normalized = normalizeWindowsPath(windowsPath);
|
|
144
|
+
// 处理盘符
|
|
145
|
+
if (normalized.length >= 2 && normalized[1] === ':') {
|
|
146
|
+
const drive = normalized[0].toLowerCase();
|
|
147
|
+
const rest = normalized.slice(2).replace(/\\/g, '/');
|
|
148
|
+
return `/${drive}${rest}`;
|
|
149
|
+
}
|
|
150
|
+
return normalized.replace(/\\/g, '/');
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* 获取用户主目录
|
|
154
|
+
* @returns 用户主目录路径
|
|
155
|
+
*/
|
|
156
|
+
export function getHomeDir() {
|
|
157
|
+
const homeDir = process.env.USERPROFILE || process.env.HOME || '';
|
|
158
|
+
return normalizeWindowsPath(homeDir);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* 检查是否在 Windows 平台
|
|
162
|
+
* @returns 是否为 Windows
|
|
163
|
+
*/
|
|
164
|
+
export function isWindows() {
|
|
165
|
+
return process.platform === 'win32';
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* 获取临时目录
|
|
169
|
+
* @returns 临时目录路径
|
|
170
|
+
*/
|
|
171
|
+
export function getTempDir() {
|
|
172
|
+
const tmpDir = process.env.TEMP || process.env.TMP || path.join(getHomeDir(), 'AppData', 'Local', 'Temp');
|
|
173
|
+
return normalizeWindowsPath(tmpDir);
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=windows-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windows-utils.js","sourceRoot":"","sources":["../src/windows-utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "mcp-server-gemini",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "Specialized MCP server for Gemini 3.0 Pro focused on UI generation and frontend development",
|
|
5
|
+
"main": "dist/server.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"mcp-server-gemini": "./dist/server.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "tsc",
|
|
11
|
+
"prepare": "npm run build",
|
|
12
|
+
"start": "node dist/server.js",
|
|
13
|
+
"dev": "ts-node src/server.ts",
|
|
14
|
+
"test": "jest",
|
|
15
|
+
"test:watch": "jest --watch",
|
|
16
|
+
"lint": "eslint src/**/*.ts",
|
|
17
|
+
"format": "prettier --write src/**/*.ts"
|
|
18
|
+
},
|
|
19
|
+
"type": "module",
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"@google/genai": "^1.8.0",
|
|
22
|
+
"fast-glob": "^3.3.3",
|
|
23
|
+
"micromatch": "^4.0.8",
|
|
24
|
+
"undici": "^7.16.0"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@types/jest": "^29.5.0",
|
|
28
|
+
"@types/micromatch": "^4.0.10",
|
|
29
|
+
"@types/node": "^20.10.5",
|
|
30
|
+
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
|
31
|
+
"@typescript-eslint/parser": "^6.0.0",
|
|
32
|
+
"eslint": "^8.0.0",
|
|
33
|
+
"jest": "^29.5.0",
|
|
34
|
+
"prettier": "^3.0.0",
|
|
35
|
+
"ts-jest": "^29.1.0",
|
|
36
|
+
"typescript": "^5.3.3"
|
|
37
|
+
},
|
|
38
|
+
"keywords": [
|
|
39
|
+
"mcp",
|
|
40
|
+
"model-context-protocol",
|
|
41
|
+
"gemini",
|
|
42
|
+
"google-gemini",
|
|
43
|
+
"ai",
|
|
44
|
+
"llm",
|
|
45
|
+
"claude-desktop",
|
|
46
|
+
"cursor",
|
|
47
|
+
"windsurf",
|
|
48
|
+
"typescript"
|
|
49
|
+
],
|
|
50
|
+
"author": "LKbaba (based on aliargun/mcp-server-gemini)",
|
|
51
|
+
"license": "MIT",
|
|
52
|
+
"repository": {
|
|
53
|
+
"type": "git",
|
|
54
|
+
"url": "git+https://github.com/LKbaba/Gemini-mcp.git"
|
|
55
|
+
},
|
|
56
|
+
"bugs": {
|
|
57
|
+
"url": "https://github.com/LKbaba/Gemini-mcp/issues"
|
|
58
|
+
},
|
|
59
|
+
"homepage": "https://github.com/LKbaba/Gemini-mcp#readme",
|
|
60
|
+
"engines": {
|
|
61
|
+
"node": ">=16.0.0"
|
|
62
|
+
},
|
|
63
|
+
"files": [
|
|
64
|
+
"dist",
|
|
65
|
+
"README.md",
|
|
66
|
+
"LICENSE",
|
|
67
|
+
"CHANGELOG.md"
|
|
68
|
+
]
|
|
69
|
+
}
|