hybrid server
The server is able to function both locally and remotely, depending on the configuration or use case.
Jinni:将您的项目纳入背景
Jinni 是一款高效地为大型语言模型提供项目上下文的工具。它提供了包含元数据的相关项目文件的统一视图,克服了逐个读取文件的局限性和低效率。
该工具背后的理念是,LLM 上下文窗口很大,模型很智能,并且直接查看您的项目可以最好地使模型帮助您解决任何问题。
有一个用于与 AI 工具集成的 MCP(模型上下文协议)服务器和一个用于手动使用的命令行实用程序(CLI),可将项目上下文复制到剪贴板,以便粘贴到您需要的任何位置。
这些工具对于什么算作相关的项目上下文有自己的看法,以便在大多数用例中开箱即用,自动排除:
如果需要,可以使用 .contextfiles 以完整的粒度自定义包含/排除 - 除了定义包含之外,它的工作方式类似于 .gitignore。
MCP 服务器可以根据需要提供项目所需的内容。默认情况下,范围是整个项目,但模型可以请求特定的模块/匹配模式等。
MCP 快速入门
适用于 Cursor / Roo / Claude Desktop / 客户端的 MCP 服务器配置:
如果您的系统上没有 uv,请安装: https://docs.astral.sh/uv/getting-started/installation/
重新加载您的 IDE,您现在可以要求代理读取上下文。
如果您想将其限制到特定的模块/路径,只需询问 - 例如“读取测试上下文”。
使用 Cursor 进行操作:
光标用户须知
游标可以悄悄地删除大于允许最大值的上下文,因此,如果您有一个相当大的项目,并且代理的行为就像工具调用从未发生过一样,请尝试减少您引入的内容(“读取 xyz 的上下文”)
成分
jinni
MCP 服务器:- 与 Cursor、Cline、Roo、Claude Desktop 等 MCP 客户端集成。
- 公开一个
read_context
工具,该工具从指定的项目目录返回相关文件内容的连接字符串。
jinni
CLI:- 用于手动生成项目上下文转储的命令行工具。
- 适用于通过复制粘贴或文件输入向 LLM 提供上下文。或者将输出通过管道传输到任何需要的地方。
特征
- **高效的上下文收集:**在一次操作中读取并连接相关的项目文件。
- 智能过滤(Gitignore 风格包含):
- 使用基于
.gitignore
语法(pathspec
库的gitwildmatch
)的系统。 - 支持使用放置在项目目录中的
.contextfiles
进行分层配置。规则会根据正在处理的文件/目录动态应用。 - 匹配行为:模式会根据正在处理的目标目录(如果未指定具体目标,则为项目根目录)的相对路径进行匹配。例如,如果目标是
src/
,则src/.contextfiles
中的规则!app.py
将匹配app.py
。输出路径仍相对于原始项目根目录。 - **覆盖:**支持
--overrides
(CLI)或 rules(MCP)rules
,以独占使用一组特定的规则。当覆盖启用时,内置默认规则和任何.contextfiles
都将被忽略。覆盖的路径匹配仍然相对于目标目录。 - **显式目标包含:**显式指定为目标的文件始终会被包含(绕过规则检查,但不会绕过二进制/大小检查)。显式指定为目标的目录始终会被输入,然后规则发现/匹配将相对于该目标目录进行。
- 使用基于
- 可定制配置(
.contextfiles
/ Overrides):- 使用应用于相对路径的
.gitignore
样式模式精确定义要包含或排除的文件/目录。 - 以
!
开头的模式表示否定匹配(排除模式)。(请参阅下面的“配置”部分)。
- 使用应用于相对路径的
- **大型上下文处理:**如果包含的文件总大小超过可配置的限制(默认值:100MB),则会中止并抛出
DetailedContextSizeError
错误。错误消息会列出造成大小差异最大的10个文件,帮助您确定需要排除的文件。有关管理上下文大小的指导,请参阅“故障排除”部分。 - **元数据头:**输出包括每个文件的文件路径、大小和修改时间(可以使用
list_only
禁用)。 - **编码处理:**尝试多种常见的文本编码(UTF-8、Latin-1 等)。
- **仅列出模式:**仅列出将包含的文件的相对路径,但不列出其内容。
用法
MCP 服务器( read_context
工具)
- **设置:**配置您的 MCP 客户端(例如,Claude Desktop 的
claude_desktop_config.json
)以通过uvx
运行jinni
服务器。 - **调用:**当通过 MCP 客户端与您的 LLM 交互时,模型可以调用
read_context
工具。- **
project_root
(字符串,必需):**项目根目录的绝对路径。规则发现和输出路径都相对于此根目录。 targets
(JSON 字符串数组,必需):指定project_root
中需要处理的文件/目录列表。必须是 JSON 字符串路径数组(例如,["path/to/file1", "path/to/dir2"]
)。路径可以是绝对路径,也可以是相对于 CWD 的相对路径。所有目标路径必须解析到project_root
内部的位置。如果提供的是空列表[]
,则处理整个project_root
。rules
(JSON 字符串数组,必需): 强制的内联过滤规则列表(使用.gitignore
风格的语法,例如["src/**/*.py", "!*.tmp"]
)。如果不需要特定规则,请提供一个空列表[]
(这将使用内置默认值)。如果非空,则仅使用这些规则,忽略内置默认值和.contextfiles
。- **
list_only
(布尔值,可选):**如果为真,则仅返回相对文件路径列表而不是内容。 - **
size_limit_mb
(整数,可选):**覆盖上下文大小限制(以 MB 为单位)。 - **
debug_explain
(布尔值,可选):**在服务器上启用调试日志记录。
- **输出:**该工具返回一个包含连接内容(带标题)或文件列表的字符串。标题/列表中的路径相对于提供的
project_root
。如果出现上下文大小错误,它将返回一个DetailedContextSizeError
错误,其中包含有关最大文件的详细信息。
- **
MCP 服务器( usage
工具)
- **调用:**模型可以调用
usage
工具(不需要参数)。 - **输出:**以字符串形式返回
README.md
文件的内容。
(详细的服务器设置说明将根据您的 MCP 客户端而有所不同。通常,您需要配置客户端来执行 Jinni 服务器。)
运行服务器:
- **推荐方法:**使用
uvx
直接运行服务器入口点(需要在 PyPI 上发布jinni
包或uvx
可以找到该包):MCP 客户端配置示例(例如,Copyclaude_desktop_config.json
):Copy
请参阅特定 MCP 客户端的文档,了解具体的设置步骤。确保uv
(用于uvx
)或正确的 Python 环境(用于python -m
)可用。 usage
工具对应于jinni usage
CLI 命令。
命令行实用程序( jinni
CLI)
- **
<PATH...>
(可选):**要分析的项目目录或文件的一个或多个路径。如果未提供,则默认为当前目录 (.
)。 - **
-r <DIR>
/--root <DIR>
(可选):**指定项目根目录。如果提供,规则发现将从此处开始,并且输出路径相对于此目录。如果省略,则根目录将从<PATH...>
参数的共同祖先推断出来(如果仅处理“.”,则为 CWD)。 - **
--output <FILE>
/-o <FILE>
(可选):**将输出写入<FILE>
而不是打印到标准输出。 - **
--list-only
/-l
(可选):**仅列出将包含的文件的相对路径。 - **
--overrides <FILE>
(可选):**使用<FILE>
中的规则,而不是发现.contextfiles
。 - **
--size-limit-mb <MB>
/-s <MB>
(可选):**覆盖最大上下文大小(以 MB 为单位)。 - **
--debug-explain
(可选):**将详细的包含/排除原因打印到 stderr 和jinni_debug.log
。 - **
--root <DIR>
/-r <DIR>
(可选):**见上文。 - **
--no-copy
(可选):**防止在打印到标准输出时自动将输出内容复制到系统剪贴板(默认是复制)。
安装
您可以使用pip
或uv
安装 Jinni:
使用 pip:
使用紫外线:
这将使jinni
CLI 命令在您的环境中可用。请参阅上面的“运行服务器”部分,了解如何根据您的安装方式启动 MCP 服务器。
特定于平台的说明
Windows + WSL
Jinni v0.1.7+ 自动转换 WSL 路径。
提供以下任一内容作为project_root
(CLI --root
或 MCP 参数):
无需包装器、挂载或额外标志 - Jinni 会自动解析 Windows 上的 UNC 路径( \\wsl$\...
)。
UNC 路径格式: Jinni 始终使用\\wsl$\<distro>\...
格式,以便与所有支持 WSL 的 Windows 版本实现最大兼容性。**发行版名称处理:**发行版名称中允许使用空格和大多数特殊字符。只有真正非法的 UNC 字符才会被替换为_
。缓存: WSL 路径查找和转换会被缓存以提高性能。如果您在 Jinni 运行时安装 WSL,请重新启动 Jinni 以应用新的wslpath
。**选择退出:**设置环境变量JINNI_NO_WSL_TRANSLATE=1
以禁用所有 WSL 路径转换逻辑。
仅翻译wsl+<distro>
URI 和绝对 POSIX 路径(以/
开头);对于 SSH 或容器远程,在该环境中运行 Jinni。
运行时操作系统 | 你传递的内容 | _translate_wsl_path() 返回的内容 |
---|---|---|
视窗 | vscode-remote://wsl+Ubuntu/home/a/b | \\wsl$\\Ubuntu\home\a\b |
视窗 | /home/a/b | \\wsl$\\Ubuntu\home\a\b (通过 wslpath) |
Linux/WSL | vscode-remote://wsl+Ubuntu/home/a/b | /home/a/b |
Linux/WSL | /home/a/b | /home/a/b (未更改) |
示例
- 将
my_project/
的上下文转储到控制台:Copy - 列出将包含在
my_project/
中但不包含任何内容的文件:Copy - 将
my_project/
的上下文转储到名为context_dump.txt
的文件中:Copy - 使用
custom.rules
而不是.contextfiles
中的覆盖规则:Copy - 显示调试信息:Copy
- 转储上下文(默认情况下输出自动复制到剪贴板):Copy
- 转储上下文但不 复制到剪贴板:Copy
配置( .contextfiles
和覆盖)
Jinni 使用.contextfiles
(或覆盖文件)根据.gitignore
样式模式来确定要包含或排除哪些文件和目录。
- **核心原则:**规则在遍历过程中动态应用,相对于当前正在处理的目标目录。
- **位置 (
.contextfiles
):**将.contextfiles
放置在任意目录中。处理目录(初始目标或子目录)时,Jinni 会从该目录向下查找.contextfiles
。在当前目标目录内处理时,会忽略当前目标目录之外的父目录的规则。 - **格式:**纯文本,UTF-8 编码,每行一个模式。
- **语法:**使用标准
.gitignore
模式语法(特别是pathspec
的gitwildmatch
实现)。- **注释:**以
#
开头的行将被忽略。 - **包含模式:**指定要包含的文件/目录(例如,
src/**/*.py
,*.md
,/config.yaml
)。 - **排除模式:**以
!
开头的行表示应排除匹配的文件(否定模式)。 - **锚定:**前导
/
将模式锚定到包含.contextfiles
的目录。 - **目录匹配:**尾随的
/
仅匹配目录。 - 通配符:
*
、**
、?
作用与.gitignore
中相同。
- **注释:**以
- 规则应用逻辑:
- 确定目标: Jinni 识别目标目录(明确提供或项目根目录)。
- **覆盖检查:**如果提供了
--overrides
(CLI) 或rules
(MCP),则仅使用这些规则。所有.contextfiles
和内置默认值都将被忽略。路径匹配是相对于目标目录的。 - **动态上下文规则(无覆盖):**处理目标目录中的文件或子目录时:
- Jinni 查找从目标目录开始到当前项目目录的所有
.contextfiles
。 - 它将这些发现的
.contextfiles
中的规则与内置的默认规则相结合。 - 它将这些组合规则编译成一个规范(
PathSpec
)。 - 它根据此规范匹配相对于目标目录计算的当前文件/子目录路径。
- Jinni 查找从目标目录开始到当前项目目录的所有
- 匹配:组合规则集中最后一个与项目相对路径匹配的模式决定了它的命运。
!
表示否定匹配。如果没有用户定义的模式匹配,则该项目会被包含,除非它匹配内置的默认排除项(例如!.*
)。 - **目标处理:**明确指定的目标文件会绕过规则检查。明确指定的目录将成为规则发现和匹配其内容的根目录。输出路径始终相对于原始
project_root
。
示例( .contextfiles
)
示例 1:包含 Python 源和根配置
位于my_project/.contextfiles
:
示例 2:在子目录中覆盖
位于my_project/src/.contextfiles
:
发展
- 设计细节: DESIGN.md
- **本地运行服务器:**在开发过程中(使用
uv pip install -e .
或类似命令安装后),您可以直接运行服务器模块:本地开发的 MCP 客户端配置示例:CopyCopy
故障排除
上下文大小错误( DetailedContextSizeError
)
如果您遇到指示超出上下文大小限制的错误,Jinni 将提供其尝试包含的 10 个最大文件的列表。这有助于您识别可能需要排除的文件。
要解决此问题:
- **检查最大文件:**检查错误消息中提供的列表。是否存在不应包含在 LLM 上下文中的大文件(例如,数据文件、日志、构建工件、媒体文件)?
- **配置排除:**使用
.contextfiles
或--overrides
/rules
选项排除不必要的文件或目录。- **示例(
.contextfiles
):**要排除所有.log
文件和特定的大型数据目录:Copy - 有关详细语法和用法,请参阅上面的配置部分。
- **示例(
- **增加限制(谨慎使用):**如果所有包含的文件确实有必要,可以使用
--size-limit-mb
(CLI) 或size_limit_mb
(MCP) 增加大小限制。请注意 LLM 上下文窗口的限制和处理成本。 - **使用
jinni usage
/usage
:**如果您在排除故障时需要参考这些说明或配置详细信息,请使用jinni usage
命令或usage
MCP 工具。
You must be authenticated.
Tools
Jinni 是一款高效地为大型语言模型提供项目上下文的工具。它提供了包含元数据的相关项目文件的统一视图,克服了逐个读取文件的局限性和低效率。
该工具背后的理念是,LLM 上下文将