Skip to main content
Glama
EtienneBBeaulac

Multi-Workspace MCP Server

Multi-Workspace MCP Server

Enables coding agents to access configured repository workspaces from a single session, especially companion repos outside the current project workspace.

Problem Solved

AI coding agents are normally confined to a single workspace. When developing cross-platform features (e.g., FlowCoordinator on both Android/Kotlin and iOS/Swift), the agent loses all context when switching platforms. This MCP server gives the agent simultaneous access to both repositories, enabling:

  • Port features from Kotlin to Swift (or vice versa) without context loss

  • Read iOS code to learn conventions while working in Android Studio

  • Generate Swift files directly in the iOS repo

  • Search and inspect another repo without leaving the current agent session

Related MCP server: Cross-Project MCP Server

Tools Provided

read_crossproject

Read a file from a configured workspace root — usually a companion repo outside the current project workspace. Prefer the IDE's built-in read/navigation tools for files in the current workspace. Returns up to 500 lines by default with line numbers and metadata (totalLines, startLine, endLine, truncated). Use offset/limit to paginate.

read_crossproject(workspace: "ios", path: "Modules/Messaging/Sources/MessagingCoordinator/StreamState.swift")
read_crossproject(workspace: "ios", path: "Modules/.../LargeFile.swift", offset: 100, limit: 50)

write_crossproject

Create or overwrite a file in a configured workspace root — typically another repo exposed through this MCP, not the current project. Prefer the IDE's built-in editing/refactoring tools for current-workspace files. If a writeAllowlist is configured, only matching paths are writable.

write_crossproject(
  workspace: "ios",
  path: "Modules/Messaging/Sources/MessagingCoordinator/v2/KeyReducer.swift",
  content: "// Swift code here"
)

list_crossproject

List files and directories in a configured workspace root, usually an external or companion repo rather than the current project workspace. Returns metadata (type, size, modified date) and supports recursive tree listing.

list_crossproject(workspace: "ios", path: "Modules/Messaging/Sources")
list_crossproject(workspace: "ios", path: "Modules", recursive: true, maxDepth: 2)

search_crossproject

Search text/regex in files inside a configured workspace root, usually a companion repo outside the current project workspace. Prefer the IDE's built-in code navigation/LSP tools in the current workspace when they apply. Supports output modes (content, files, count), context lines, path scoping (directory or file), and pagination.

search_crossproject(workspace: "ios", pattern: "FlowCoordinator", glob: "**/*.swift")
search_crossproject(workspace: "ios", pattern: "class.*Coordinator", path: "Modules/Messaging", outputMode: "files")

edit_crossproject

Apply search-and-replace edits to one or more files in a configured workspace root, typically for companion repos outside the current project workspace. Prefer the IDE's built-in refactoring/editing tools for typed changes in the current workspace. Supports regex with backreferences.

// Single file
edit_crossproject(
  workspace: "ios",
  paths: "Modules/.../MyFile.swift",
  oldString: "func oldName()",
  newString: "func newName()",
)

// Multiple files (same replacement applied to all)
edit_crossproject(
  workspace: "ios",
  paths: ["FileA.swift", "FileB.swift", "FileC.swift"],
  oldString: "oldValue",
  newString: "newValue",
  replaceAll: true,
)

// Regex with backreferences
edit_crossproject(
  workspace: "ios",
  paths: "Modules/.../MyFile.swift",
  oldString: "func (\\w+)\\(param: String\\)",
  newString: "func $1(param: Int)",
  useRegex: true,
)

run_crossproject

Run a shell command in a configured workspace root. Supports pipes, redirects, and chained commands. Returns stdout, stderr, and exit code. Use for build tools, codegen, git operations, or any command that needs to run in the workspace directory.

run_crossproject(workspace: "ios", command: "git status")
run_crossproject(workspace: "ios", command: "fastlane ios codegen_messaging")
run_crossproject(workspace: "android", command: "./gradlew :messaging:impl:test")
run_crossproject(workspace: "ios", command: "git log --oneline | head -5", timeout: 10000)

Configuration

Create a workspace-config.json in the repo root (see workspace-config.example.json):

{
  "workspaces": {
    "ios": {
      "root": "$HOME/git/zillow/ZillowMap",
      "name": "iOS (ZillowMap)"
    }
  }
}

By default, the agent can write to any file and run any command within the workspace root. To restrict either, add optional allowlists:

{
  "workspaces": {
    "ios": {
      "root": "$HOME/git/zillow/ZillowMap",
      "name": "iOS (ZillowMap)",
      "writeAllowlist": ["Modules/**/*.swift", "Tests/**/*.swift"],
      "runAllowlist": ["git", "fastlane", "xcodebuild", "swift"]
    }
  }
}
  • writeAllowlist (optional): Glob patterns. If omitted, all writes allowed. Controls write_crossproject and edit_crossproject.

  • runAllowlist (optional): Command prefixes. If omitted, all commands allowed. Controls run_crossproject. When configured, the first word of the command must match one of the prefixes (e.g., "git status" matches "git").

Supports $HOME and ~ expansion in root paths. There are no hardcoded defaults — all workspaces must be defined in this file. If missing, the server starts with zero workspaces and logs instructions.

Installation

npm install -g @exaudeus/workspace-mcp

Firebender Registration

Add to ~/.firebender/firebender.json:

{
  "mcpServers": {
    "workspace": {
      "command": "npx",
      "args": ["-y", "@exaudeus/workspace-mcp"]
    }
  }
}

Alternatively, if installed globally:

{
  "mcpServers": {
    "workspace": {
      "command": "workspace-mcp"
    }
  }
}

Usage Pattern

  1. Agent reads Android Kotlin file: read_file("libraries/illuminate/flow-coordinator/v2/KeyReducer.kt")

  2. Agent reads iOS conventions: read_crossproject("ios", "Modules/Messaging/Sources/MessagingCoordinator/SubjectCoordinator.swift")

  3. Agent references Rosetta mapping: (read .firebender/rosetta-kotlin-swift.md in Android workspace)

  4. Agent generates Swift equivalent

  5. Agent writes: write_crossproject("ios", "Modules/.../KeyReducer.swift", content)

All in one session, no context loss.

Companion Projects

  • Memory MCP: memory-mcp — persistent codebase knowledge for AI agents (separate repo)

  • Rosetta rules: .firebender/rosetta-kotlin-swift.md in Android workspace — idiom mapping reference

Development

# Install dependencies
npm install

# Build
npm run build

# Run in dev mode
npm run dev

# Run tests
npm test

Safety Features

Stateless Safety Model

The MCP uses stateless validation instead of session tracking - no brittle state to manage:

Edit Safety:

  • Verifies old string exists before editing (reads file fresh every time)

  • Enforces uniqueness (unless replaceAll=true)

  • Fails fast with clear errors if string not found or not unique

  • No need to "read first" - the verification IS the safety check

Write Safety:

  • Warns when overwriting existing files (logged to stderr)

  • Agent can still overwrite if intentional (not blocked)

  • Optional writeAllowlist restricts writes to matching paths (omit to allow all)

Why Stateless?

  • No session state = no brittleness across restarts/reconnects

  • Always reads fresh from disk (catches external changes)

  • Works across multiple agents/sessions

  • Self-documenting (failures explain what's wrong)

Other Safety Features

  • Write allowlist (optional): When configured, only allows writes to paths matching the allowlist patterns

  • Path validation: Resolved paths are verified to stay within workspace root (prevents directory traversal)

  • Shell injection prevention: All external commands use execFile with argument arrays (no shell interpolation)

  • Audit logging: All write/edit operations logged to stderr

Future Enhancements

  • Git operations (git_crossproject)

  • Additional workspaces (backend repos, etc.)

  • Auto-context loading (inject .firebender/platform-context.md on first access)

Available Tools

6 tools
edit_crossprojectA

Apply search-and-replace edits to one or more files in a configured workspace root, typically for companion repos outside the current project workspace. Prefer built-in IDE refactoring/editing tools for typed changes in the current workspace. The same find/replace runs on all specified files; oldString must be unique per file unless replaceAll is true. If a writeAllowlist is configured, only matching paths are editable. When useRegex=true, newString supports regex backreferences ($1, $2, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathsYesSingle file path or array of file paths relative to workspace root
useRegexNoTreat oldString as a regex pattern (default: false). Enables $1/$2 backreferences in newString.
newStringYesReplacement string. When useRegex=true, supports $1/$2 backreferences for capture groups.
oldStringYesString to find and replace (must be unique in each file unless replaceAll=true)
workspaceYesWorkspace name (none configured — create a workspace-config.json)
replaceAllNoReplace all occurrences in each file (default: false, requires uniqueness)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden and does it well: it discloses that the same find/replace runs on all specified files, that oldString must be unique unless replaceAll is true, that writeAllowlist can restrict editable paths, and that useRegex enables backreferences. It stops short of describing failure behavior or reversibility, but it covers the most operationally important traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is five concise sentences with no filler. It front-loads the core purpose, then adds usage preference, matching rules, allowlist constraints, and regex behavior in a logical order. Every sentence contributes operational information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description covers a broad set of needed context: purpose, workspace scope, tool-selection guidance, uniqueness rules, write restrictions, and regex semantics. The main omissions are expected return values and behavior on partial multi-file failure, but the tool remains confidently invocable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers 100% of parameters, so the baseline is 3. The description adds valuable cross-parameter meaning by clarifying that the replacement is applied uniformly across all paths, that per-file uniqueness is required unless replaceAll is set, and that writeAllowlist can further constrain path editability. This is meaningful value beyond the schema fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence specifies a precise action ('Apply search-and-replace edits') and a concrete resource ('one or more files in a configured workspace root'). It also clarifies that the tool is typically for companion repos outside the current project workspace, which distinguishes it from sibling read/write/list/search/run tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises preferring built-in IDE refactoring/editing tools for typed changes in the current workspace, giving a clear when-not-to-use alternative. It also establishes the intended context: companion repos outside the current project workspace. It does not enumerate each sibling distinction, but the guidance is sufficient for typical selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_crossprojectA

List files and directories in a configured workspace root, usually an external or companion repo rather than the current project workspace. Returns metadata (type, size, modified date) and supports recursive tree listing.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoDirectory path relative to workspace root. Omit or use "." to list the root.
maxDepthNoMaximum depth for recursive listing (default: unlimited)
recursiveNoList subdirectories recursively (default: false)
workspaceYesWorkspace name (none configured — create a workspace-config.json)

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It clearly discloses that the tool returns metadata (type, size, modified date) and supports recursive tree listing, which are the key behavioral traits for a listing tool. It stops short of describing failure modes or config requirements, but the schema already notes the workspace configuration gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two focused sentences with no redundancy. It front-loads the primary purpose and immediately adds distinguishing context and return-value details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list operation with four parameters fully described in the schema, the description is mostly complete: it covers the resource, the scope, the metadata returned, and the recursive option. It omits explicit error conditions or workspace-config behavior, but the schema already hints at the missing workspace configuration.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents path, maxDepth, recursive, and workspace. The description adds general context about workspace roots and recursive listing but does not materially enhance the parameter-level meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: list files and directories in a configured workspace root, with return metadata and recursive listing. It also differentiates this from the current project workspace and from sibling read/write/edit/search/run tools by specifying listing behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives useful context that this targets external or companion repos rather than the current project workspace, implying when it is appropriate. However, it does not explicitly state when to prefer it over siblings like read_crossproject or search_crossproject, nor does it mention any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_crossprojectA

Read a file from a configured workspace root, usually a companion repo outside the current project workspace. Prefer the IDE built-in read/navigation tools for files in the current workspace. Returns up to 500 lines by default with line numbers and metadata (totalLines, range, truncated); use offset/limit to paginate.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFile path relative to workspace root (e.g., "Modules/MyModule/File.swift")
limitNoOptional: Read N lines. Returns plain text when used.
offsetNoOptional: Start from line N (1-indexed). Returns plain text when used.
workspaceYesWorkspace name (none configured — create a workspace-config.json)

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden, and it discloses useful operational details: default 500-line cap, line numbers, metadata keys (totalLines, range, truncated), and pagination via offset/limit. It does not explicitly warn that limit/offset returns plain text, but that detail is present in the schema, so the description adds substantial value without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three tight sentences with no filler. The core purpose is front-loaded, usage guidance comes second, and the return-behavior detail closes it out efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description supplies the key context an agent needs: what the tool reads, when to prefer alternatives, default output limits, metadata shape, and pagination approach. The schema covers the remaining parameter-level details like 1-indexed offsets and plain-text returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning by framing workspace as a 'configured workspace root' and explaining that offset/limit operate together for pagination. This goes beyond the individual parameter descriptions in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Read a file from a configured workspace root.' It clarifies this is for companion repos outside the current project workspace, which distinguishes it from current-workspace tools and from sibling write/edit/list/search/run_crossproject operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises using IDE built-in read/navigation tools for files in the current workspace, while reserving this tool for configured external workspace roots. This gives clear when-to-use and when-not-to-use guidance, even naming the preferred alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_crossprojectA

Run a shell command in a configured workspace root, typically a companion repo outside the current project workspace. Supports pipes, redirects, and chained commands. Returns stdout, stderr, and exit code. Use for build tools, codegen, git operations, or any command that needs to run in the workspace directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
commandYesShell command to execute (e.g., "git status", "fastlane ios codegen", "npm test")
timeoutNoTimeout in milliseconds (default: 60000 = 60s)
maxBufferNoMaximum output buffer in bytes (default: 10MB). Output is truncated if exceeded.
workspaceYesWorkspace name (none configured — create a workspace-config.json)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavior disclosure. It adds useful behavioral detail: supports pipes/redirects/chained commands and returns stdout, stderr, and exit code. However, it does not warn that shell commands can be destructive or have side effects outside the workspace, which is relevant for a command execution tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler. It front-loads the primary purpose, then covers capabilities and typical use cases, each sentence earning its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers what the command returns, where it runs, what shell features are supported, and when to use it. It does not discuss environment variables, shell profile, or destructive potential, but the schema covers the parameters and the description is sufficiently complete for an agent to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3 and the description need not repeat parameter details. The description adds tool-level context about the workspace root, but it does not materially improve on the schema's per-parameter descriptions such as timeout, maxBuffer, or the workspace configuration caveat.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Run a shell command in a configured workspace root.' It also clarifies scope by noting the workspace is 'typically a companion repo outside the current project workspace,' which immediately distinguishes this from the read/write/edit/list/search sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit use cases: 'Use for build tools, codegen, git operations, or any command that needs to run in the workspace directory.' It does not state when not to use it or name alternative tools, but the sibling tools are clearly file operations rather than command execution, so the context is strong even without formal exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_crossprojectA

Search text or regex in a configured workspace root, usually a companion repo outside the current project workspace. Prefer built-in code navigation/LSP tools in the current workspace when they apply. Uses ripgrep with output modes, context lines, case-insensitive matching, and pagination; when using contextLines, results include contextBefore/contextAfter arrays.

ParametersJSON Schema
NameRequiredDescriptionDefault
globNoOptional glob pattern to filter files by name/extension (e.g., "**/*.swift")
pathNoOptional path relative to workspace root to scope the search. Can be a directory (e.g., "Modules/Messaging/Sources") or a single file (e.g., "Modules/.../File.swift").
limitNoMaximum number of results
offsetNoSkip first N results
patternYesSearch pattern (regex or text)
workspaceYesWorkspace name (none configured — create a workspace-config.json)
outputModeNocontent: show matches with line numbers, files: paths only, count: match countscontent
contextLinesNoShow N lines before/after each match (content mode only)
caseInsensitiveNoCase-insensitive search (default: false)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and delivers: discloses the ripgrep backend, output modes, context lines, case-insensitive matching, pagination, and the contextBefore/contextAfter array shape when contextLines is used. Minor gaps remain on default behaviors and error conditions, but for an unannotated tool this is substantial disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three information-dense sentences with zero filler: purpose/scope first, usage guidance second, behavioral details third. Each sentence adds distinct value and the most decision-relevant info (what it searches, where) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter tool with no annotations and no output schema, the description is nearly complete: it covers return shape, scoping, and when to avoid the tool. Remaining gaps are low-stakes for a read-only search — no mention of error handling (e.g., unconfigured workspace) or performance limits, though the schema's workspace enum hints at the configuration issue.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds cross-parameter meaning beyond the schema: it ties pagination (limit/offset), outputMode semantics, and the contextLines return-structure together, and explains what 'workspace' means operationally (configured companion repo).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'Search text or regex in a configured workspace root, usually a companion repo outside the current project workspace.' The scope qualifier ('outside the current project workspace') sharply differentiates it from the sibling tools (read/write/edit/list/run_crossproject) and from built-in code navigation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing guidance: 'Prefer built-in code navigation/LSP tools in the current workspace when they apply.' This tells the agent when NOT to use the tool, though it names a tool category rather than specific sibling tools or concrete conditions for choosing this one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

write_crossprojectA

Create or overwrite a file in a configured workspace root, typically another repo exposed through this MCP rather than the current project. Prefer built-in IDE editing/refactoring tools for current-workspace files. If a writeAllowlist is configured, only matching paths are writable. All writes are logged.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFile path relative to workspace root
contentYesFile contents to write
workspaceYesWorkspace name (none configured — create a workspace-config.json)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even though no annotations are provided, the description discloses overwrite semantics, the writeAllowlist restriction, and that all writes are logged. This covers the most important behavioral traits for a write operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three focused sentences deliver the core action, scope, usage guidance, constraints, and logging behavior. Every sentence earns its place, with the primary purpose front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description sufficiently covers what the tool does, where it applies, when not to use it, write restrictions, and side effects. Return/error details are not specified, but they are less critical for a straightforward write tool without an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters. The description adds context about the configured workspace root but does not add meaning beyond the schema for individual parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Create or overwrite a file in a configured workspace root,' giving a clear verb, object, and scope. It further distinguishes the tool from current-project tools and from sibling read/search/list/run operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent to prefer built-in IDE editing/refactoring tools for current-workspace files, providing an exclusion condition. It also clarifies the intended use case—another repo exposed via MCP. It does not explicitly direct modification of existing cross-project files to edit_crossproject, but the core guidance is present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv1.0.1
    • First observededit_crossproject
    • First observedlist_crossproject
    • First observedread_crossproject
    • First observedrun_crossproject
    • First observedsearch_crossproject
    • First observedwrite_crossproject

TDQS

A4.4/5.0

Scored across 6 tools

Disambiguation5/5

Each tool maps to a distinct filesystem operation: read, write, edit, list, search, and run. Even the two mutation tools are clearly separated by whole-file overwrite versus targeted search-and-replace.

Naming Consistency5/5

All six tool names follow the same `verb_crossproject` pattern with snake_case throughout. The naming makes the domain and operation immediately predictable.

Tool Count5/5

Six tools is well-scoped for a companion-repo file and command operations server. Each tool covers a distinct need without bloat or redundancy.

Completeness4/5

The set covers list, read, write, edit, search, and arbitrary command execution, which is strong for the stated purpose. A direct delete or rename tool is missing, though `run_crossproject` can compensate via shell commands.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to access contextual knowledge from multiple repositories through Sequa's Contextual Knowledge Engine. Provides architecture-aware code understanding and cross-repository context for more accurate, production-ready code generation.
    59
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables multiple AI coding agents to collaborate on the same Git repository without conflicts through isolated worktrees, file locking, automated test verification, and a serialized merge queue.
    7
    6
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to develop within a local project workspace by reading and modifying files, running commands and tests, checking Git state, and persisting progress as history sessions that can be restored in later conversations.
    -