FFF for VS Code
Workspace-scoped fff-mcp search tools for Copilot Chat and other language-model clients in VS Code.
Why an extension?
Global / user-level MCP configs for fff-mcp often start with no project path, so the server falls back to the process working directory (frequently $HOME) and tries to index everything.
This extension:
- Always passes the current workspace folder as the index root to
fff-mcp.
- Exposes FFF as native language model tools (
grep, find_files, multi_grep) instead of registering an MCP server in VS Code.
Native tools avoid Copilot’s MCP UI forcing raw tool-call JSON into the chat transcript (which breaks the “N tool calls” collapsible block and wastes space). Tool results also attach Chat’s expandable file/location list (toolResultDetails) when paths can be parsed from fff output. Completion messages (pastTenseMessage / toolResultMessage) are used only when the chatParticipantPrivate proposed API is available (Extension Development Host or allowlisted builds).
Requirements
- VS Code
1.125+ (or compatible)
- System-installed
fff-mcp on PATH (or configure fff.binaryPath)
Install fff-mcp (example):
curl -fsSL https://raw.githubusercontent.com/dmtrKovalenko/fff.nvim/main/install-mcp.sh | bash
What you get
| Tool |
# reference |
Purpose |
grep |
#grep |
Content search (default) — pattern + optional constraints |
find_files |
#find_files |
Fuzzy file-name search — query + optional constraints |
multi_grep |
#multi_grep |
OR search across multiple patterns — patterns + optional constraints |
Under the hood the extension spawns fff-mcp for the workspace folder and forwards tool calls over stdio JSON-RPC. Tools always target the first enabled workspace folder (single-root is the primary scenario). File filters go in constraints, not mixed into the search text — the same explicit style as multi_grep.
Migration from MCP
If you previously used this extension’s MCP server provider (≤ 0.0.x) or a global fff entry in user mcp.json:
- Remove any global / user
fff-mcp MCP entries so tools are not duplicated.
- Reload the window; enable FFF Grep / Find Files / Multi Grep in Chat tools if prompted.
- First invocation may ask for confirmation — choose Always Allow for a smoother agent loop.
Settings
| Setting |
Scope |
Default |
Description |
fff.enabled |
resource |
true |
Enable FFF tools for this folder |
fff.binaryPath |
machine-overridable |
fff-mcp |
Path to the executable |
fff.extraArgs |
resource |
["--no-update-check"] |
Extra args after the workspace path |
fff.frecencyDb |
resource |
"" |
Optional --frecency-db |
fff.historyDb |
resource |
"" |
Optional --history-db |
fff.logFile |
resource |
"" |
Optional --log-file |
fff.logLevel |
resource |
"" |
Optional --log-level |
fff.maxCachedFiles |
resource |
null |
Optional --max-cached-files |
Example (user or workspace settings.json):
{
"fff.binaryPath": "/usr/bin/fff-mcp",
"fff.extraArgs": ["--no-update-check", "--no-warmup"],
"fff.maxCachedFiles": 20000
}
Commands
- FFF: Show Status — print resolved command/args and whether an
fff-mcp session is running for each folder.
Development
npm install
npm run compile
# F5 → "Run Extension"
In the Extension Development Host:
- Open a project folder.
- Open Chat (agent mode) and confirm FFF tools appear (not as an MCP server).
- Optionally run FFF: Show Status.
Notes
- Prefer this extension over a global
fff entry in user mcp.json for project work.
- Child processes are owned by the extension and killed on deactivate / config change.