| Crates.io | jumble |
| lib.rs | jumble |
| version | 0.4.0 |
| created_at | 2025-12-28 14:08:58.887684+00 |
| updated_at | 2026-01-02 05:45:59.992908+00 |
| description | An MCP server that provides queryable, on-demand project context to LLMs |
| homepage | |
| repository | https://github.com/velvet-tiger/jumble |
| max_upload_size | |
| id | 2008854 |
| size | 159,625 |
An MCP server that provides queryable, on-demand project context to LLMs.
Large documentation files overload LLM context windows. Even well-structured docs require reading everything upfront, wasting tokens on irrelevant information.
Jumble flips the model: instead of loading documentation, an LLM queries for exactly what it needs.
LLM: "What projects are in this workspace?"
→ calls get_workspace_overview()
→ receives: workspace info, all projects, dependency graph
LLM: "What's the test command for my-app"
→ calls get_commands("my-app", "test")
→ receives: "cargo test"
LLM: "What files handle authentication?"
→ calls get_architecture("my-app", "authentication")
→ receives: files + one-sentence summary
LLM: "What conventions should I follow?"
→ calls get_workspace_conventions()
→ receives: workspace-wide coding standards
Prebuilt binaries for common platforms (Linux, macOS, Windows) are available on the GitHub Releases page:
Download the archive for your platform, extract it, and point your MCP client at the extracted jumble binary.
cargo install --path .
cargo install jumble
Jumble discovers projects by scanning for .jumble/project.toml files. It also looks for a .jumble/workspace.toml at the root for workspace-level configuration.
Projects and workspace metadata are loaded once when the server starts and cached in memory. If you change any .jumble/* files, either restart the jumble process or call the reload_workspace tool (see below) to pick up changes without restarting.
Set the root directory via:
JUMBLE_ROOT environment variable--root CLI argumentAdd to your Warp MCP configuration:
{
"jumble": {
"command": "jumble",
"args": ["--root", "/path/to/your/workspace"]
}
}
or, if you are building from source...
{
"jumble": {
"args": [
"--root",
"/path/to/your/workspace"
],
"command": "/<path/to/repository>/target/release/jumble"
}
}
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"jumble": {
"command": "/path/to/jumble",
"args": ["--root", "/path/to/your/workspace"]
}
}
}
Jumble autodiscovers skills from multiple sources:
.jumble/skills/*.md - Project-specific flat skills.claude/skills/**/SKILL.md - Claude-style structured skills.codex/skills/**/SKILL.md - Codex-style structured skills (both project-local and $HOME)Structured skills (Claude/Codex format) can include companion resources like scripts/, references/, docs/, assets/, and examples/ subdirectories. When you retrieve a skill with get_skill, companion files are automatically listed.
Windsurf's Cascade MCP config uses the same shape as Claude Desktop's config. Create or edit ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"jumble": {
"command": "/absolute/path/to/jumble",
"args": ["--root", "/path/to/your/workspace"]
}
}
}
Restart Windsurf so Cascade reloads MCP servers, then verify that jumble appears in the tools list.
Cursor reads MCP configuration from mcp.json in either your project .cursor directory or your home directory.
Global configuration (available in all projects), in ~/.cursor/mcp.json:
{
"mcpServers": {
"jumble": {
"command": "/absolute/path/to/jumble",
"args": ["--root", "/path/to/your/workspace"]
}
}
}
Alternatively, add the same mcpServers block to .cursor/mcp.json in a single project to scope jumble to that project only.
Codex stores MCP configuration in ~/.codex/config.toml.
Using the Codex CLI:
codex mcp add jumble -- /absolute/path/to/jumble --root /path/to/your/workspace
Or edit ~/.codex/config.toml directly:
[mcp_servers.jumble]
command = "/absolute/path/to/jumble"
args = ["--root", "/path/to/your/workspace"]
Restart the Codex IDE extension or TUI and confirm that jumble is listed as an MCP server.
Context files are designed to be created by the same AI agents that read them. See AUTHORING.md for the complete guide.
Sample prompt:
Create jumble context for this project.
Read the AUTHORING.md guide at /path/to/jumble/AUTHORING.md, then examine this project's structure to create:
1. .jumble/project.toml (required) - Extract project info from manifest files, identify key commands, map architectural concepts to files
2. .jumble/conventions.toml - Capture patterns to follow and gotchas to avoid (look at existing code patterns, comments, and any constitution.md or similar files)
3. .jumble/docs.toml - Index the docs/ directory if it exists, with one-line summaries
These fields appear in .jumble/project.toml / .jumble/workspace.toml and are what the MCP tools expose back to the AI.
Commands ([commands])
build, test, lint, run, dev).get_commands(project, command_type) and get_project_info(..., field: "commands") so the AI can tell you exactly how to build, test, or run a project without guessing.Entry points ([entry_points])
main = "src/main.rs", api = "src/api/mod.rs").get_project_info(project) so an AI can jump straight to the right file when exploring a new codebase.Concepts / architecture ([concepts.*])
concepts.authentication.files = ["src/auth/mod.rs"]concepts.authentication.summary = "JWT-based auth via middleware"get_architecture(project, concept) returns the full description and file list for one concept.get_related_files(project, query) searches across all concepts by name/summary to find related files (e.g. "database", "routing").Documentation index (.jumble/docs.toml)
get_docs(project) lists all topics and summaries so the AI can pick the right document before reading it.get_docs(project, topic) returns the resolved filesystem path for a single doc.Coding conventions and gotchas (.jumble/conventions.toml and workspace [conventions] / [gotchas])
conventions.toml captures patterns to follow and sharp edges to avoid for a single project.[conventions] / [gotchas] in .jumble/workspace.toml describe cross-project standards and pitfalls.get_conventions(project, ...) returns project-specific conventions/gotchas.get_workspace_conventions(...) returns workspace-wide standards or gotchas.Related projects ([related_projects])
upstream = ["shared-lib"] → projects this one depends on.downstream = ["examples"] → projects that depend on this one.get_workspace_overview() uses this to build a simple textual dependency graph so the AI can see how projects fit together.Workspaces (.jumble/workspace.toml)
get_workspace_overview() returns workspace metadata plus the list of all projects.get_workspace_conventions() returns workspace-level conventions and gotchas that apply across multiple projects.Create a .jumble/project.toml in each project:
[project]
name = "my-project"
description = "One-line description"
language = "rust"
[commands]
build = "cargo build --release"
test = "cargo test"
lint = "cargo clippy"
[entry_points]
main = "src/main.rs"
[concepts.authentication]
files = ["src/auth/mod.rs"]
summary = "JWT-based auth via middleware"
[related_projects]
upstream = ["shared-lib"] # projects this depends on
downstream = ["examples"] # projects that depend on this
Create a .jumble/workspace.toml at the workspace root:
[workspace]
name = "My Workspace"
description = "Monorepo for my projects"
[conventions]
error_handling = "Use anyhow for apps, thiserror for libraries"
testing = "Unit tests in same file, integration tests in tests/"
[gotchas]
feature_flags = "Features enabled by one project affect all dependents"
.jumble/conventions.toml - Project-specific conventions and gotchas.jumble/docs.toml - Documentation index with summaries.jumble/skills/*.md - Task-specific skills for common operationsSee AUTHORING.md for the complete guide.
Returns workspace info, all projects with descriptions, and dependency graph. Call this first to understand the workspace structure.
get_workspace_overview()
Returns workspace-level conventions and gotchas that apply across all projects.
get_workspace_conventions()
get_workspace_conventions(category: "gotchas")
Reloads workspace and project metadata from disk. Use this after editing .jumble files if you want to avoid restarting the MCP server.
reload_workspace()
Returns a canonical prompt you can feed to an AI assistant to generate .jumble context files (project, workspace, conventions, docs) for any project.
get_jumble_authoring_prompt()
Lists all discovered projects with their descriptions.
Returns metadata about a project (description, language, version, entry points).
get_project_info(project: "my-project")
get_project_info(project: "my-project", field: "dependencies")
Returns executable commands for a project.
get_commands(project: "my-project")
get_commands(project: "my-project", command_type: "test")
Returns files and summary for a specific architectural concept.
get_architecture(project: "my-project", concept: "authentication")
Searches concepts and returns matching files.
get_related_files(project: "my-project", query: "database")
Returns project-specific coding conventions and gotchas.
get_conventions(project: "my-project")
get_conventions(project: "my-project", category: "gotchas")
Returns documentation index with summaries, or path to a specific doc.
get_docs(project: "my-project")
get_docs(project: "my-project", topic: "configuration")
Lists or retrieves task-specific skills for common operations.
list_skills(project: "my-project")
get_skill(project: "my-project", topic: "add-endpoint")
Jumble is designed so that an AI can generate context files for any project:
When asked to "create jumble context for project X", an AI should:
.jumble/project.toml (required)conventions.toml, docs.toml, and skillsValidate your TOML files with the included JSON schema:
# With taplo
taplo check .jumble/project.toml --schema /path/to/jumble/schema.json
MIT