Skip to content

[Suggestion]: omit git:clean annotations from fff-mcp output #844

Description

@uknfire

Which fff frontend(s)?

MCP server (fff-mcp)

What problem are you trying to solve?

Summary

fff-mcp currently appends git:clean to clean files returned by find_files, for example:

src/a.ts git:clean
src/b.ts git:clean
src/c.ts git:modified

I think clean files should have no Git annotation, while dirty states such as modified, untracked, deleted, and staged states should continue to be shown.

Why this matters

clean is the overwhelmingly common/default state in a repository. Repeating it for nearly every result adds visual noise and consumes unnecessary LLM context without adding much information.

The absence of a Git annotation can already imply the default state, similar to how git status --short only surfaces files that differ from the default state.

For an MCP tool used by coding agents, the higher-value information is the exceptional/actionable state:

src/a.ts
src/b.ts
src/c.ts git:modified
src/new.ts git:untracked

This preserves the useful Git signal while making the output more compact and easier for models to scan.

Existing inconsistency in this repository

pi-fff already follows this behavior in fffFileAnnotation(): it explicitly suppresses clean, unknown, and empty Git states, and only surfaces actionable Git state.

By contrast, fff-mcp uses format_git_status_opt() inside file_suffix(). Since format_git_status_opt(None) returns Some("clean"), file_suffix() ends up materializing the default state as git:clean for every clean file.

There is also already a useful separation in the core implementation: during the initial scan, git_status: None effectively means clean, so clean is represented internally as the absence of an exceptional state. The MCP presentation layer could preserve that idea instead of turning it back into a visible annotation.

Expected behavior

Keep full Git status information in the core/query layer so constraints such as git:modified continue to work, but suppress clean in the MCP presentation layer.

Conceptually, fff-mcp could treat the formatted Git status as absent when it is clean:

let git_status = format_git_status_opt(git_status)
    .filter(|status| *status != "clean");

Then only non-default Git states would be appended to file results.

I think this would be better as the default MCP behavior rather than a new configuration option, because clean is the default state and hiding it loses no actionable information. A verbose/debug mode could still expose the complete status if needed.

Proposed solution

No response

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions