Daedro / Handbook
Chapters

Existing MCP connections

The private hub is moving from a synthetic fixture to an operator-approved connection catalog. The catalog does not let callers supply endpoints, commands, secret paths, workspace IDs or arbitrary tool names. Each enabled operation maps to a distinct exact-path OpenBao AppRole. MFA still gates browser execution.

Current connection inventory

Connection Integration path Current acceptance
S3 Pinned read-only Go MCP container; credential bundle from OpenBao Real authenticated bucket listing passed with existing local credentials; OpenBao import pending
Audio transcription Existing HTTP MCP; service bearer token from OpenBao Authenticated capabilities call passed; provider transcription not exercised
Video transcription Existing HTTP MCP; service bearer token from OpenBao Authenticated capabilities call passed; video delegates transcription to voice
Text Existing HTTP MCP Local service stopped
WhatsApp archive Existing HTTP MCP Local service stopped
YouTube Existing HTTP MCP API, worker and database stopped
Discord read Existing Python stdio MCP Token environment injection supported upstream; default token file absent
AdsPower Existing Node stdio MCP Cached version identified; pinned execution and operation review pending
Telegram Existing Compose stdio MCP Session-file isolation and container lifecycle review pending
Factory Existing stdio MCP Lifecycle operation allowlist pending
Agent factory Existing stdio MCP Lifecycle operation allowlist pending

This inventory excludes browser automation infrastructure and documentation-only connectors. Disabled cards explain the actual blocker rather than reporting a successful deployment. Private URLs, inventories and credential values are not part of this document.

Import and verification

Run python3 deploy/openbao/connect-existing.py --plan first. It identifies existing source configuration without printing credentials. The owner then runs python3 deploy/openbao/connect-existing.py in their own terminal and enters the recovery-file passphrase. It checks the private IAP tunnel first and restores the same authorized tunnel if port 8821 is not listening, using the local Google login and a 30-minute SSH-key authorization. An occupied but unverified port or TLS validation failure stops the import. Automatic tunnel recovery was exercised against the existing VM. It uses verified IAP TLS connectivity, decrypts the administrative token in memory, and creates exact-path grants for ready connections. Existing differing secret values require explicit rotation; reruns may reuse an identical imported value. It does not remove original local credentials, re-enroll MFA, start stopped services or create cloud resources.

The script writes a private connected.json and an issuer token valid for 24 hours, then runs secrets --config FILE --check. This operator-only diagnostic requires access to private configuration; it does not create an unauthenticated web route. The UI must be restarted explicitly with the connected configuration after checks pass. A restart invalidates existing browser sessions.

Each run obtains a one-use SecretID (at most 60 seconds), reads only its bound versioned secret, and revokes the OpenBao workload token before invoking MCP. Provider credentials themselves are not short-lived merely because their OpenBao lease is short-lived. Their provider-side scope and rotation still apply.

Execution boundaries

S3 secrets are a strictly keyed JSON bundle injected into the child environment. Docker receives environment variable names, not secret values in command-line arguments. The container image is immutable, cannot pull at run time, has no host mounts, a read-only filesystem, dropped capabilities and resource limits. Every run uses a random container name and attempts bounded cleanup, including after failure. Host/Docker administrators can inspect container environment values; cleanup can fail if the Docker daemon becomes unavailable.

Existing local HTTP processors receive their own bearer token from OpenBao. Requests reject redirects and never send the bearer header to another endpoint. Unencrypted HTTP is accepted only for literal loopback IPs; remote endpoints require verified HTTPS. Response sizes and timeouts are bounded. Provider keys inside audio/video services have not been migrated by moving their MCP bearer tokens. A separate service-side integration is needed for those provider keys.

The UI reports operation completion, duration and a reference, not raw provider bodies or bucket names. These are connection checks, not an upload/transcription workflow. Media upload, durable job status, results, provider-secret migration, issuer renewal and deployment of currently stopped services remain rollout work.