Skip to content

Conversation

aaronsteers
Copy link
Contributor

@aaronsteers aaronsteers commented Aug 6, 2025

feat: add manifest_url to get_connector_info tool

Summary

This PR adds a manifest_url field to the ConnectorInfo class returned by the get_connector_info MCP tool. This allows MCP clients to directly access the connector manifest URL without needing to make a separate call to the get_connector_manifest tool from connector-builder-mcp.

Key Changes:

  • Added manifest_url: str | None = None field to ConnectorInfo class
  • Updated get_connector_info function to populate the manifest URL using the pattern: https://connectors.airbyte.com/metadata/airbyte/{connector_name}/latest/metadata.yaml
  • Follows the same URL pattern established in connector-builder-mcp for consistency

This complements the recently added get_connector_manifest command in connector-builder-mcp, providing users with direct access to manifest URLs when they already have connector info.

Review & Testing Checklist for Human

  • Verify URL pattern works: Test the manifest URL with several real connectors (e.g., source-faker, destination-duckdb) to ensure the endpoint returns valid YAML content
  • Test MCP tool functionality: Use an MCP client to call get_connector_info and verify the manifest_url field is properly populated and accessible
  • Validate error handling: Test with invalid/non-existent connector names to ensure the function still works (URL will be constructed but may 404 when accessed)
  • Consider version strategy: Evaluate whether always using "latest" version is appropriate, or if we should allow version specification in future iterations

Diagram

%%{ init : { "theme" : "default" }}%%
graph TB
    MCPClient["MCP Client"]
    GetConnectorInfo["get_connector_info()"]
    ConnectorInfo["ConnectorInfo Class"]
    ManifestURL["manifest_url field"]
    AirbyteAPI["connectors.airbyte.com"]
    
    MCPClient --> GetConnectorInfo
    GetConnectorInfo --> ConnectorInfo
    ConnectorInfo --> ManifestURL
    ManifestURL -.-> AirbyteAPI
    
    ConnectorInfo:::major-edit
    ManifestURL:::major-edit
    GetConnectorInfo:::minor-edit
    MCPClient:::context
    AirbyteAPI:::context
    
    subgraph Legend
        L1[Major Edit]:::major-edit
        L2[Minor Edit]:::minor-edit  
        L3[Context/No Edit]:::context
    end
    
    classDef major-edit fill:#90EE90
    classDef minor-edit fill:#87CEEB
    classDef context fill:#FFFFFF
Loading

Notes

  • This change maintains backward compatibility - existing ConnectorInfo usage will continue to work unchanged
  • The manifest URL uses the "latest" version consistently, which matches the default behavior in connector-builder-mcp
  • URL construction follows the pattern discovered during connector-builder-mcp implementation
  • Limited local testing due to missing GCP credentials for integration tests, but unit tests and linting pass

Requested by: AJ Steers (@aaronsteers)
Devin Session: https://app.devin.ai/sessions/050f37720b8f485a86ad1fbe51d5e013

Summary by CodeRabbit

  • New Features
    • Added a new field displaying a metadata URL for each connector, allowing users to access connector metadata files directly from the interface.

Important

Auto-merge enabled.

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

- Add manifest_url field to ConnectorInfo class
- Update get_connector_info function to populate manifest URL
- Use same URL pattern as connector-builder-mcp: https://connectors.airbyte.com/metadata/airbyte/{connector_name}/latest/metadata.yaml

Co-Authored-By: AJ Steers <[email protected]>
@Copilot Copilot AI review requested due to automatic review settings August 6, 2025 00:30
Copy link
Contributor

Original prompt from AJ Steers
@Devin - for connector-builder-mcp, please add a command: get_connector_manifest. Given a connector name, it should return the 'raw' github content from master, assuming the (approximate) file path: airbyte/integrations/airbyte-connectors/{connector-name}/manifest.yaml

Or ( better), pull from the versioned <http://connectors.airbyte.com|connectors.airbyte.com> endpoint, which could accept an optional version, defaulting to 'latest'.

Copy link
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 and CI monitoring

Copy link

github-actions bot commented Aug 6, 2025

👋 Greetings, Airbyte Team Member!

Here are some helpful tips and reminders for your convenience.

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/1754440011-add-manifest-url-to-connector-info' pyairbyte --help

# Install PyAirbyte from this branch for development:
pip install 'git+https://github.com/airbytehq/PyAirbyte.git@devin/1754440011-add-manifest-url-to-connector-info'

Helpful Resources

PR Slash Commands

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

  • /fix-pr - Fixes most formatting and linting issues
  • /poetry-lock - Updates poetry.lock file
  • /test-pr - Runs tests with the updated PyAirbyte

Community Support

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

📝 Edit this welcome message.

Copy link
Contributor

@Copilot Copilot AI left a comment

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 adds a manifest_url field to the ConnectorInfo class, enabling MCP clients to directly access connector manifest URLs without requiring separate API calls. The implementation constructs URLs using the established Airbyte connectors API pattern.

Key Changes:

  • Added manifest_url field to ConnectorInfo class as an optional string
  • Updated get_connector_info function to populate manifest URLs using the standardized Airbyte API pattern
  • Maintains backward compatibility with existing ConnectorInfo usage

Copy link
Contributor

coderabbitai bot commented Aug 6, 2025

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

📝 Walkthrough

Walkthrough

A new optional manifest_url field was added to the ConnectorInfo model. The get_connector_info function was updated to generate this URL based on the connector name, pointing to a standardized location for connector metadata. No other logic or error handling was modified.

Changes

Cohort / File(s) Change Summary
ConnectorInfo model & registry logic
airbyte/mcp/_connector_registry.py
Added optional manifest_url field to ConnectorInfo and updated get_connector_info to generate and include this URL.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~2 minutes

Possibly related PRs

Suggested reviewers

  • bnchrch

Would you like to consider adding a test to verify that the manifest_url is correctly constructed for various connector names, wdyt?


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 3ab575d and 18251bb.

📒 Files selected for processing (1)
  • airbyte/mcp/_connector_registry.py (3 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • airbyte/mcp/_connector_registry.py
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (6)
  • GitHub Check: Pytest (All, Python 3.11, Windows)
  • GitHub Check: Pytest (All, Python 3.11, Ubuntu)
  • GitHub Check: Pytest (All, Python 3.10, Windows)
  • GitHub Check: Pytest (No Creds)
  • GitHub Check: Pytest (Fast)
  • GitHub Check: Pytest (All, Python 3.10, Ubuntu)
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch devin/1754440011-add-manifest-url-to-connector-info

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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

‼️ IMPORTANT
Auto-reply has been disabled for this repository in the CodeRabbit settings. The CodeRabbit bot will not respond to your replies unless it is explicitly tagged.

  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai or @coderabbitai title anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (2)
airbyte/mcp/_connector_registry.py (2)

92-92: Add a Field description for the new attribute?

All the other optional attributes in ConnectorInfo either have a self-explanatory name or are documented via their own types. For consistency and to help downstream users (e.g., in autogenerated docs), would you consider annotating manifest_url with a short Field(description="…") like the other parameters? wdyt?


121-124: Consider extracting the URL template (and quoting the connector name) into a constant/helper?

Hard-coding the string literal here works, but:

  1. Re-using the same pattern elsewhere would require duplication.
  2. Some connector names may contain characters that need URL encoding (unlikely but possible).

Would it be cleaner to define something like

_MANIFEST_URL_TPL = (
    "https://connectors.airbyte.com/metadata/airbyte/{connector}/latest/metadata.yaml"
)
manifest_url = _MANIFEST_URL_TPL.format(connector=quote(connector_name, safe=""))

at the top of the file (or in a small helper), using urllib.parse.quote for safety? This keeps the function body slimmer and the template centralised. Wdyt?

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9c3245f and 3ab575d.

📒 Files selected for processing (1)
  • airbyte/mcp/_connector_registry.py (2 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (6)
  • GitHub Check: Pytest (All, Python 3.11, Ubuntu)
  • GitHub Check: Pytest (All, Python 3.11, Windows)
  • GitHub Check: Pytest (No Creds)
  • GitHub Check: Pytest (All, Python 3.10, Windows)
  • GitHub Check: Pytest (All, Python 3.10, Ubuntu)
  • GitHub Check: Pytest (Fast)
🔇 Additional comments (1)
airbyte/mcp/_connector_registry.py (1)

130-130: Return manifest_url only when construction succeeded?

If, for any reason, the earlier string interpolation fails (e.g., an unexpected character that raises in future validation logic), returning None keeps the contract of “optional.” Do you want to wrap the assignment in a try/except and fall back to None to be extra defensive, or is the current always-present string acceptable? Wdyt?

Copy link

github-actions bot commented Aug 6, 2025

PyTest Results (Fast Tests Only, No Creds)

301 tests  ±0   301 ✅ ±0   4m 8s ⏱️ -9s
  1 suites ±0     0 💤 ±0 
  1 files   ±0     0 ❌ ±0 

Results for commit 18251bb. ± Comparison against base commit 9c3245f.

♻️ This comment has been updated with latest results.

@aaronsteers aaronsteers enabled auto-merge (squash) August 6, 2025 00:38
…ing new one

Addresses feedback from @aaronsteers to reuse existing constants
rather than creating duplicates.

Co-Authored-By: AJ Steers <[email protected]>
Copy link

github-actions bot commented Aug 6, 2025

PyTest Results (Full)

364 tests  ±0   350 ✅ ±0   21m 19s ⏱️ + 3m 15s
  1 suites ±0    14 💤 ±0 
  1 files   ±0     0 ❌ ±0 

Results for commit 18251bb. ± Comparison against base commit 9c3245f.

@aaronsteers aaronsteers merged commit 07e843e into main Aug 6, 2025
22 checks passed
@aaronsteers aaronsteers deleted the devin/1754440011-add-manifest-url-to-connector-info branch August 6, 2025 17:52
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.

1 participant