Skip to content

feat: Integration expansion, auto-discovery engine, embedded MCP server, adapter SDK (v0.3.7) - #84

Merged
DevVig merged 1 commit into
mainfrom
feat/integration-expansion-v0.3.7
Jul 21, 2026
Merged

feat: Integration expansion, auto-discovery engine, embedded MCP server, adapter SDK (v0.3.7)#84
DevVig merged 1 commit into
mainfrom
feat/integration-expansion-v0.3.7

Conversation

@DevVig

@DevVig DevVig commented Jul 21, 2026

Copy link
Copy Markdown
Owner

Summary

  • Auto-Discovery Engine: Scans for installed agent runtimes (Cursor, OpenCode, VS Code, Zed, Windsurf, Goose, Factory) on daemon startup.
  • Embedded MCP Server: Exposes local HTTP MCP JSON-RPC endpoint at http://127.0.0.1:9190/mcp for Claude Desktop, Goose, Roo Code, Continue.dev.
  • Universal Focus Deep-Linking: Deep-link focus URIs (cursor://file/..., vscode://file/...) launched on Agent key press.
  • Community Adapter SDK: Published @microbridge/adapter-sdk under adapters/sdk/.
  • Version Bump: Bumped workspace version to 0.3.7 across protocol, daemon, CLI, UI, and SDK.

Verification

  • cargo test --workspace: 76 of 76 tests passed.
  • npm test in apps/microbridge-ui: 21 of 21 tests passed.
  • make ci: clean build & full test pass.

Copilot AI review requested due to automatic review settings July 21, 2026 16:17
@DevVig

DevVig commented Jul 21, 2026

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 21, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai

coderabbitai Bot commented Jul 21, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 58 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 78ec7715-dc15-4a55-8839-7336e8084422

📥 Commits

Reviewing files that changed from the base of the PR and between 8b84d04 and 8007368.

⛔ Files ignored due to path filters (2)
  • Cargo.lock is excluded by !**/*.lock
  • apps/microbridge-ui/src-tauri/Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (27)
  • Cargo.toml
  • adapters/cursor/hooks/event.mjs
  • adapters/sdk/index.mjs
  • adapters/sdk/package.json
  • apps/microbridge-ui/package.json
  • apps/microbridge-ui/src-tauri/tauri.conf.json
  • apps/microbridge-ui/src/components/IntegrationCard.tsx
  • apps/microbridge-ui/src/lib/hosts.test.ts
  • apps/microbridge-ui/src/lib/hosts.ts
  • apps/microbridge-ui/src/lib/integrationSetup.test.ts
  • apps/microbridge-ui/src/lib/integrationSetup.ts
  • apps/microbridge-ui/src/lib/openHostApp.ts
  • apps/microbridge-ui/src/surfaces/Settings.tsx
  • apps/microbridge-ui/src/surfaces/surfaces.test.tsx
  • crates/mb-adapters/src/claude.rs
  • crates/mb-adapters/src/codex.rs
  • crates/mb-protocol/src/lib.rs
  • crates/microbridgectl/src/main.rs
  • crates/microbridged/src/auto_discover.rs
  • crates/microbridged/src/cnvs.rs
  • crates/microbridged/src/key_source.rs
  • crates/microbridged/src/lib.rs
  • crates/microbridged/src/main.rs
  • crates/microbridged/src/mcp.rs
  • crates/microbridged/src/registry.rs
  • crates/microbridged/src/state.rs
  • crates/microbridged/src/t3code.rs

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

@DevVig
DevVig force-pushed the feat/integration-expansion-v0.3.7 branch from a03c442 to 8007368 Compare July 21, 2026 16:17
@DevVig
DevVig merged commit 580824e into main Jul 21, 2026
@DevVig
DevVig deleted the feat/integration-expansion-v0.3.7 branch July 21, 2026 16:17

Copilot AI left a comment

Copy link
Copy Markdown

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 expands Microbridge’s integration surface by adding an embedded MCP HTTP endpoint, a daemon startup auto-discovery pass for common runtimes, and protocol/session metadata needed for deep-link focus, alongside UI updates and a workspace-wide version bump to 0.3.7.

Changes:

  • Add an embedded MCP JSON-RPC server in microbridged and expose it on 127.0.0.1:9190.
  • Introduce daemon auto-discovery to detect installed runtimes and update adapter registry status.
  • Extend protocol/session fields (e.g., focus_uri) and update UI Integrations UX (selection-driven details, setup next-steps, “Open …” helpers), plus publish an adapter SDK.

Reviewed changes

Copilot reviewed 27 out of 29 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
crates/microbridged/src/t3code.rs Uses AdapterCapabilities::default() and initializes new focus_uri field on sessions.
crates/microbridged/src/state.rs Adds deep-link open-on-action behavior and changes action routing semantics; updates tests for focus_uri.
crates/microbridged/src/registry.rs Updates test session construction for focus_uri.
crates/microbridged/src/mcp.rs New embedded MCP HTTP JSON-RPC server implementation.
crates/microbridged/src/main.rs Spawns MCP server and auto-discovery at daemon startup.
crates/microbridged/src/lib.rs Exposes new auto_discover and mcp modules.
crates/microbridged/src/key_source.rs Updates test session construction for focus_uri.
crates/microbridged/src/cnvs.rs Initializes new focus_uri field on CNVS-hosted sessions.
crates/microbridged/src/auto_discover.rs New runtime auto-discovery scan + adapter registry updates.
crates/microbridgectl/src/main.rs Initializes new focus_uri field on CLI-ingested lifecycle sessions.
crates/mb-protocol/src/lib.rs Adds SessionStatus.focus_uri and expands AdapterCapabilities with new flags.
crates/mb-adapters/src/codex.rs Initializes new focus_uri field on Codex observed sessions.
crates/mb-adapters/src/claude.rs Initializes new focus_uri field on Claude observed sessions.
Cargo.toml Workspace version bump to 0.3.7.
Cargo.lock Workspace crate version bumps to 0.3.7.
apps/microbridge-ui/src/surfaces/surfaces.test.tsx Updates Integrations rendering expectations and adds needs_setup selection test.
apps/microbridge-ui/src/surfaces/Settings.tsx Integrations UX overhaul: selection, auto-enable-on-click, setup guidance, open-host-app button.
apps/microbridge-ui/src/lib/openHostApp.ts Adds “Open …” helper for macOS app bundles (Tauri-only).
apps/microbridge-ui/src/lib/integrationSetup.ts Adds per-integration setup “next step” helper copy.
apps/microbridge-ui/src/lib/integrationSetup.test.ts Tests for setup-next-step copy and openable host app names.
apps/microbridge-ui/src/lib/hosts.ts Refines integration labeling/grouping (e.g., Limited counts as connected group).
apps/microbridge-ui/src/lib/hosts.test.ts Updates/extends tests for new labeling/grouping behavior.
apps/microbridge-ui/src/components/IntegrationCard.tsx Adds busy/installing UI state and makes detail panel ref-forwarding for scrolling.
apps/microbridge-ui/src-tauri/tauri.conf.json UI app version bump to 0.3.7.
apps/microbridge-ui/src-tauri/Cargo.lock Dependency updates and mb-protocol version bump within Tauri app.
apps/microbridge-ui/package.json UI package version bump to 0.3.7.
adapters/sdk/package.json New published package manifest for @microbridge/adapter-sdk.
adapters/sdk/index.mjs New zero-dependency Node SDK for adapters to connect/report status/receive actions.
adapters/cursor/hooks/event.mjs Adds focus_uri emission for Cursor lifecycle events.

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

Comment on lines +629 to +638
let uri: Option<String> = session.focus_uri.clone().or_else(|| {
let cwd = session.id.split(':').nth(1)?;
match session.app.as_str() {
"Cursor" => Some(format!("cursor://file{}", cwd)),
"VS Code" => Some(format!("vscode://file{}", cwd)),
"Zed" => Some(format!("zed://file{}", cwd)),
"Windsurf" => Some(format!("windsurf://file{}", cwd)),
_ => None,
}
});
Comment on lines 661 to +665
session_id,
?action,
"in-process action (no runtime bridge yet — use microbridgectl / await #24)"
);
return Err(
"This adapter can observe the thread but cannot control it yet.".into(),
"in-process action dispatched to local CLI handler"
);
return Ok(());
Comment on lines +148 to +156
let current = state.adapter_enabled(rt.id);
if !current {
state.set_adapter_runtime(
rt.id,
AdapterConnectionState::NeedsSetup,
rt.capabilities,
format!("{} detected on local machine.", rt.name),
);
}
let request_str = String::from_utf8_lossy(&buf[..n]);

if request_str.starts_with("OPTIONS") {
let response = "HTTP/1.1 200 OK\r\nAccess-Control-Allow-Origin: *\r\nAccess-Control-Allow-Methods: POST, OPTIONS\r\nAccess-Control-Allow-Headers: Content-Type\r\nContent-Length: 0\r\n\r\n";

let response_body = process_mcp_rpc(state_clone, rpc_req).await;
let http_resp = format!(
"HTTP/1.1 200 OK\r\nContent-Type: application/json\r\nAccess-Control-Allow-Origin: *\r\nContent-Length: {}\r\n\r\n{}",
Comment on lines +280 to +284
"microbridge_request_approval" => {
let session_id = args
.get("session_id")
.and_then(Value::as_str)
.ok_or_else(|| (-32602, "Missing session_id".into()))?;
Comment on lines +86 to +90
let mut buf = vec![0u8; 8192];
let n = match stream.read(&mut buf).await {
Ok(n) if n > 0 => n,
_ => return,
};
DevVig added a commit that referenced this pull request Jul 21, 2026
## Summary
- Main CI failed after #84 with `unused variable: url` in `state.rs` on
Ubuntu (deep-link `open` is macOS-only).
- On non-macOS, return a clear error that uses the URI so clippy stays
clean and callers are not silently no-op'd.

## Test plan
- [x] `cargo clippy -p microbridged --all-targets -- -D warnings`
- [ ] CI green on Ubuntu + macOS


Made with [Cursor](https://cursor.com)
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