Skip to content

feat(mcp): annotate local tools with requires_client_filesystem#1052

Merged
Aaron ("AJ") Steers (aaronsteers) merged 2 commits into
mainfrom
devin/1782756593-requires-client-filesystem
Jun 29, 2026
Merged

feat(mcp): annotate local tools with requires_client_filesystem#1052
Aaron ("AJ") Steers (aaronsteers) merged 2 commits into
mainfrom
devin/1782756593-requires-client-filesystem

Conversation

@aaronsteers

@aaronsteers Aaron ("AJ") Steers (aaronsteers) commented Jun 29, 2026

Copy link
Copy Markdown
Member

Summary

All 12 tools in airbyte/mcp/local.py now declare @mcp_tool(requires_client_filesystem=True). These tools require Docker, local DuckDB cache, local .env files, or a local git checkout — none of which are available in a hosted MCP environment.

When the server runs with MCP_NO_CLIENT_FILESYSTEM=1 (e.g., Cloud Run), the standard no_client_filesystem_filter in fastmcp-extensions automatically hides these tools from tools/list. No changes to server.py or the existing AIRBYTE_MCP_DOMAINS_DISABLED=local mechanism — this annotation adds a complementary, tool-level signal.

Depends on: airbytehq/fastmcp-extensions#62

Link to Devin session: https://app.devin.ai/sessions/44011da412754582858f85b6e6574316
Requested by: Aaron ("AJ") Steers (@aaronsteers)

Summary by CodeRabbit

  • Bug Fixes
    • Local connector and testing tools now correctly request access to your local filesystem, improving compatibility for file-based workflows.
  • Chores
    • Updated the fastmcp-extensions dependency to a newer version within the same major release range.

Important

Auto-merge enabled.

This PR is set to merge automatically when all requirements are met.

All 12 tools in the local module now declare
@mcp_tool(requires_client_filesystem=True). When hosted with
MCP_NO_CLIENT_FILESYSTEM=1, the standard filter in fastmcp-extensions
hides these tools automatically.

Co-Authored-By: AJ Steers <aj@airbyte.io>
@devin-ai-integration

Copy link
Copy Markdown
Contributor

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment, CI, and merge conflict monitoring

@github-actions

Copy link
Copy Markdown

👋 Greetings, Airbyte Team Member!

Here are some helpful tips and reminders for your convenience.

💡 Show Tips and Tricks

Testing This PyAirbyte Version

You can test this version of PyAirbyte using the following:

# Run PyAirbyte CLI from this branch:
uvx --from 'git+https://github.com/airbytehq/PyAirbyte.git@devin/1782756593-requires-client-filesystem' pyairbyte --help

# Install PyAirbyte from this branch for development:
pip install 'git+https://github.com/airbytehq/PyAirbyte.git@devin/1782756593-requires-client-filesystem'

PR Slash Commands

Airbyte Maintainers can execute the following slash commands on your PR:

  • /fix-pr - Fixes most formatting and linting issues
  • /uv-lock - Updates uv.lock file
  • /test-pr - Runs tests with the updated PyAirbyte
  • /prerelease - Builds and publishes a prerelease version to PyPI
📚 Show Repo Guidance

Helpful Resources

Community Support

Questions? Join the #pyairbyte channel in our Slack workspace.

📝 Edit this welcome message.

@aaronsteers Aaron ("AJ") Steers (aaronsteers) marked this pull request as ready for review June 29, 2026 18:12
Copilot AI review requested due to automatic review settings June 29, 2026 18:12
@github-code-quality

github-code-quality Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: Python

Python / code-coverage/pytest-fast

The overall coverage in the branch is 67%. The coverage in the branch is 65%.

Show a code coverage summary of the most impacted files.
File d9f652f 8466992 +/-
airbyte/_util/api_util.py 36% 37% +1%
airbyte/registry.py 70% 72% +2%
airbyte/mcp/_tool_utils.py 72% 77% +5%
airbyte/mcp/int...c_history_ui.py 0% 36% +36%
airbyte/mcp/int...hared_models.py 0% 81% +81%
airbyte/cloud/models.py 0% 91% +91%
airbyte/mcp/int..._registry_ui.py 0% 92% +92%
airbyte/mcp/int...nc_status_ui.py 0% 97% +97%
airbyte/mcp/int...ive/__init__.py 0% 100% +100%
airbyte/mcp/int...tive/_prefab.py 0% 100% +100%

Python / code-coverage/pytest-no-creds

The overall coverage in the branch is 67%. The coverage in the branch is 65%.

Show a code coverage summary of the most impacted files.
File d9f652f 8466992 +/-
airbyte/_util/api_util.py 36% 37% +1%
airbyte/registry.py 70% 72% +2%
airbyte/mcp/_tool_utils.py 72% 77% +5%
airbyte/mcp/int...c_history_ui.py 0% 36% +36%
airbyte/mcp/int...hared_models.py 0% 81% +81%
airbyte/cloud/models.py 0% 91% +91%
airbyte/mcp/int..._registry_ui.py 0% 92% +92%
airbyte/mcp/int...nc_status_ui.py 0% 97% +97%
airbyte/mcp/int...ive/__init__.py 0% 100% +100%
airbyte/mcp/int...tive/_prefab.py 0% 100% +100%

Python / code-coverage/pytest

The overall coverage in the branch is 72%. The coverage in the branch is 71%.

Show a code coverage summary of the most impacted files.
File d9f652f 8466992 +/-
airbyte/registry.py 70% 72% +2%
airbyte/mcp/_tool_utils.py 72% 77% +5%
airbyte/mcp/server.py 69% 76% +7%
airbyte/mcp/int...c_history_ui.py 0% 36% +36%
airbyte/mcp/int...hared_models.py 0% 81% +81%
airbyte/mcp/int..._registry_ui.py 0% 92% +92%
airbyte/cloud/models.py 0% 93% +93%
airbyte/mcp/int...nc_status_ui.py 0% 97% +97%
airbyte/mcp/int...ive/__init__.py 0% 100% +100%
airbyte/mcp/int...tive/_prefab.py 0% 100% +100%

Updated June 29, 2026 18:41 UTC
Code Coverage is in Public Preview. Learn more and provide us with your feedback.

@coderabbitai

coderabbitai Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The PR raises the fastmcp-extensions minimum version and adds requires_client_filesystem=True to all local FastMCP tool decorators in airbyte/mcp/local.py. No tool signatures or internal logic change.

Changes

Local MCP Tool Filesystem Capability Flag

Layer / File(s) Summary
Raise fastmcp-extensions minimum
pyproject.toml
Updates the fastmcp-extensions dependency range to >=0.7.0,<1.0.0.
Mark local tools as filesystem-requiring
airbyte/mcp/local.py
Adds requires_client_filesystem=True to the decorator of all 12 local FastMCP tools: validate_connector_config, list_connector_config_secrets, list_dotenv_secrets, list_source_streams, get_source_stream_json_schema, read_source_stream_records, get_stream_previews, sync_source_to_cache, list_cached_streams, describe_default_cache, run_sql_query, and destination_smoke_test.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly matches the main change: annotating local MCP tools with requires_client_filesystem.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch devin/1782756593-requires-client-filesystem

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR annotates the MCP “local” tool surface so hosted MCP deployments can automatically hide tools that depend on a client-side filesystem (e.g., Docker, local cache, local .env, local git checkout), using the requires_client_filesystem tool annotation.

Changes:

  • Added requires_client_filesystem=True to the @mcp_tool(...) decorator for all tools in airbyte/mcp/local.py.
  • Enables fastmcp-extensions filtering (e.g., when MCP_NO_CLIENT_FILESYSTEM=1) to omit these tools from tools/list without changing server registration logic.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread airbyte/mcp/local.py

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 2 potential issues.

Open in Devin Review

Comment thread airbyte/mcp/local.py
Comment thread airbyte/mcp/local.py
v0.7.0 adds the requires_client_filesystem parameter to mcp_tool().

Co-Authored-By: AJ Steers <aj@airbyte.io>
@aaronsteers Aaron ("AJ") Steers (aaronsteers) merged commit 1e2d7d8 into main Jun 29, 2026
23 checks passed
@aaronsteers Aaron ("AJ") Steers (aaronsteers) deleted the devin/1782756593-requires-client-filesystem branch June 29, 2026 18:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants