前言
小伙伴们大家好,我是小溪,见字如面。在不久前Gemini CLI终于上线了插件系统,终于开始缓慢追赶Claude Code CLI的脚步了,至此我们也终于可以使用大佬们的插件,共享我们的插件了。
Gemini CLI更新日志:github.com/google-gemi...
对往期内容感兴趣的小伙伴也可以看往期内容:
当前使用版本
Gemini CLI:0.13.0
优势
- 插件系统目前支持打包 MCP、上下文文件 和 自定义命令 3种配置
Gemini CLI Extension简介
Gemini CLI围绕Extension扩展构建了插件系统,它可以将 MCP服务、上下文文件 以及 自定义命令 打包成一个简单软件包,当软件包被安装到 Gemini CLI 中就可以让 Gemini 使用各种工具。Gemini CLI Extension目前已有100多款插件,包含 Context7、Nano Banana等爆火的插件。
Gemini CLI Extension官方地址:geminicli.com/extensions/

基本使用
CLI命令
Gemini CLI命令行工提供了一系列extension的管理命令,在命令行直接输入 gemini extensions -h 可以查看extensions所有命令

- install:从Git仓库或者本地路径安装插件
- uninstall:卸载指定名称的插件
- list:查看当前安装的插件
- update:更新所有或者指定插件
- disable:禁用插件
- enable:启用插件
- link:从本地路径链接一个插件
- new:从模板创建一个插件
- validate:从本地路径验证一个插件
安装插件
在Gemini CLI Extension平台查找自己需要的插件,这里我以 Nano Banana 为例

点击查看详情,复制Extension安装命令

完整命令如下:
php
$ gemini extensions install https://github.com/gemini-cli-extensions/nanobanana
在命令行终端执行安装命令,遇到权限问题,根据提示选择允许

详细信息可以在 ~/.gemini/extensions中查看

启动Gemini CLI,在交互式命令中输入以下命令查看以已安装的插件
bash
/extensions list

然后在Gemini CLI中就可以查看 Nano Banana 提供的MCP和自定义命令了


Nano Banana指令:
- /generate:单张或多张带有风格 / 变体选项的图像生成
- /edit:图像编辑
- /restore:图像修复
- /icon:生成多种尺寸的应用图标、网站图标和 UI 元素
- /pattern:生成用于背景的无缝图案和纹理
- /story:生成讲述视觉故事或流程的连续图像
- /diagram:生成技术图表、流程图和建筑模型图
- /nanobanana:使用自然语言生成或处理图片
插件使用
以 Nano Banana 为例,我们可以使用模型推理自行调用
bash
我正在创办一家名为 "Kicks" 的鞋业公司,你能帮我设计一个视觉上有吸引力的icon/logo

也可以使用 Nano Banana 提供的MCP和自定义命令调用,Nano Banana 调用目前不报错,可以不用理会

再以 Chrome Devtools MCP为例,输入命令进行安装
shell
$ gemini extensions install https://github.com/ChromeDevTools/chrome-devtools-mcp
安装完成后重启Gemini CLI,在交互式命令中输入 /mcp,可以看到刚刚通过插件安装的 chrome-devtools MCP服务

输入提示词即可使用

管理插件
Gemini CLI提供了 交互命令 和 CLI命令 2种管理插件的方式
1)交互命令
在交互式命令中输入 /extensions 可以查看插件系统提供的管理命令

- list:列出活跃的扩展程序
- update:更新扩展程序
- explore:在浏览器中打开扩展程序页面
使用 /extensions list 可以查看所有安装的插件

使用 /extensions update 可以更新所有插件或者更新指定插件

使用 /extensions explore 会打开Gemini CLI Extensions官网。
2)CLI命令
使用 gemini extensions list 可以查看详细的插件信息,包括 插件路径、来源、版本、启用禁用状态、提供的功能 等信息

使用 gemini extensions uninstall 可卸载插件
php
$ gemini extensions uninstall nanobanana
使用 gemini extensions update 可更新插件
php
# 更新指定插件
$ gemini extensions update nanobanana
# 更新所有插件
$ gemini extensions update --all
使用 gemini extensions enable|disable 可启用禁用插件,本人尝试的不起作用
shell
# 禁用插件
$ gemini extensions disable nanobanana
# 全局禁用插件
$ gemini extensions disable --scope user nanobanana
# 项目禁用插件
$ gemini extensions disable --scope project nanobanana
自定义插件
创建插件模板
Gemini CLI提供了创建插件命令,命令格式如下:
arduino
$ gemini extensions new [template]
- path:插件的路径
- template:模版类型,可选值:"context"、"custom-commands"、"exclude-tools"、"mcp-server"
接着创建我们的第一个自定义插件项目,我这里在工作区路径,直接在当前工作区项目同级目录创建自定义插件项目了
php
$ gemini extensions new ../my-first-extension mcp-server

创建完成后,可以看到目录结构如下,其实就是创建了一个带有Gemini CLI插件配置文件 gemini-extension.json 的NodeJS项目


插件配置文件
Gemini CLI自定义插件配置文件为 gemini-extension.json,一个完整的自定义插件配置如下:
bash
{
"name": "<插件名称>",
"version": "<插件版本>",
"contextFileName": "<上下文文件>",
"excludeTools": ["run_shell_command"]
"mcpServers": { # MCP配置
"nodeServer": {
"command": "node",
"args": ["${extensionPath}${/}dist${/}example.js"],
"cwd": "${extensionPath}"
}
}
}
- name :扩展程序的名称
- version :扩展程序的版本
- mcpServers :MCP 服务配置,如果扩展程序和 settings.json 文件都配置了同名的MCP服务器,则 settings.json 文件中定义的服务器优先
- command:脚本运行的核心命令
- args:脚本运行的参数数组
- cwd:脚本运行时的工作目录
- contextFileName :包含扩展上下文的文件的名称
- excludeTools :要从模型中排除的工具名称数组,例如: "excludeTools": ["run_shell_command(rm -rf)"] 将阻止 rm -rf 命令
自定义MCP服务
上面 mcp-server 命令创建的模板已经自带了一个MCP服务示例,示例代码如下:
javascript
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { z } from 'zod';
const server = new McpServer({
name: 'prompt-server',
version: '1.0.0',
});
server.registerTool(
'fetch_posts',
{
description: 'Fetches a list of posts from a public API.',
inputSchema: z.object({}).shape,
},
async () => {
const apiResponse = await fetch(
'https://jsonplaceholder.typicode.com/posts',
);
const posts = await apiResponse.json();
const response = { posts: posts.slice(0, 5) };
return {
content: [
{
type: 'text',
text: JSON.stringify(response),
},
],
};
},
);
server.registerPrompt(
'poem-writer',
{
title: 'Poem Writer',
description: 'Write a nice haiku',
argsSchema: { title: z.string(), mood: z.string().optional() },
},
({ title, mood }) => ({
messages: [
{
role: 'user',
content: {
type: 'text',
text: `Write a haiku${mood ? ` with the mood ${mood}` : ''} called ${title}. Note that a haiku is 5 syllables followed by 7 syllables followed by 5 syllables `,
},
},
],
}),
);
const transport = new StdioServerTransport();
await server.connect(transport);
修改 package.json 配置文件,添加MCP调试代码配置
perl
{
"name": "mcp-server-example",
"version": "1.0.0",
"description": "Example MCP Server for Gemini CLI Extension",
"type": "module",
"main": "example.js",
"scripts": {
"dev": "npx -y @modelcontextprotocol/inspector node dist/example.js",
"build": "tsc"
},
"devDependencies": {
"typescript": "~5.4.5",
"@types/node": "^20.11.25"
},
"dependencies": {
"@modelcontextprotocol/sdk": "^1.11.0",
"zod": "^3.22.4"
}
}
执行 npm run build 编译TS,然后执行下面命令启动MCP调试服务
arduino
$ npm run dev

服务启动完成,点击调试服务链接在浏览器中打开

点击【Connect】连接本地MCP服务

选择【Tools】测试一下MCP服务是否正常

无误后,使用 gemini extensions validate 验证一下插件的有效性
shell
$ gemini extensions validate ../my-first-extension

验证成功后即可使用 gemini extensions install 安装,也可以使用 gemini extensions link 进行符号链接(符号链接的好处就是任何更改都会立即生效,无需重新安装),我这里使用 gemini extensions link 演示
shell
$ gemini extensions link ../my-first-extension

安装或者链接成功后,就可以使用 gemini extensions list 查看到我们自定义的插件了

自定义上下文
在自定义插件目录新建一个 GEMINI.md 目录用于存放自定义上下文内容
sql
# My First Extension Instructions
You are an expert developer assistant. When the user asks you to fetch
posts, use the `fetch_posts` tool. Be concise in your responses.
配置完成后,更新 gemini-extension.json 文件,指定 contextFileName 属性
bash
{
"name": "mcp-server-example",
"version": "1.0.0",
"mcpServers": {
"nodeServer": {
"command": "node",
"args": ["${extensionPath}${/}dist${/}example.js"],
"cwd": "${extensionPath}"
}
},
"contextFileName": "GEMINI.md"
}
使用 gemini extensions list 可以看到刚刚添加的上下文信息

启动Gemini CLI,在交互式命令中输入 /memory show 可以查看具体的上下文内容,此时已经包含了自定义插件中的上下文了

自定义命令
在自定义插件目录新建一个 commands目录用于存放自定义命令,自定义命令文档可以查看官方文档:geminicli.com/docs/cli/cu...
shell
$ mkdir commands
创建一个 hello.toml 文件用于第一个自定义命令,并配置命令
ini
prompt = "输出礼貌问候语并以`*_*`开始"
再创建一个 fs 子命令目录,创建一个 grep-code.toml 文件
shell
$ mkdir fs
$ touch fs/grep-code.toml
输入提示词保存
ini
prompt = """
Please summarize the findings for the pattern `{{args}}`.
Search Results:
!{grep -r {{args}} .}
"""
目录结构如下:

重启Gemini CLI,在交互式命令中输入 / 在命令列表看到自定义的命令

直接调用自定义命令即可执行

常见问题
MCP授权失败

根据提示可知,调用 Nano Banana MCP 需要导出API Key,Github上也有对应的描述
Nano Banana Github地址:github.com/gemini-cli-...

我使用的是Gemini API Key,在命令行终端导出 GEMINI_API_KEY
ini
export GEMINI_API_KEY=your api key
MCP调用失败

Nano Banana调用尚有问题,Github Issue:github.com/gemini-cli-...
友情提示
见原文:Gemini CLI上线插件系统
本文同步自微信公众号 "程序员小溪" ,这里只是同步,想看及时消息请移步我的公众号,不定时更新我的学习经验。友情提示友情提示