Skip to content

Connect Sovyn to Manus

For Manus to move your app to Sovyn, you connect the two once. Manus calls such a connection an “MCP” or a “connector”. It takes about two minutes and needs no code.

  1. Create an access key in Sovyn

    Sign in to Sovyn and open your account menu in the top right corner. Choose API keys, or go straight to the API key page.

    Click Create API key, enter a name such as Manus connector and confirm with Create API key. Copy the new key with Copy key. It starts with sovyn_.

  2. Open the connector settings in Manus

    In Manus, open Settings and then Connectors. Click Add connectors, switch to the Custom MCP tab and choose Add custom MCP server → Direct configuration.

  3. Fill in the fields

    Field in Manus What to enter
    Server Name Sovyn
    Transport Type HTTP
    Server URL the address below
    Custom Header – name x-api-key
    Custom Header – value your key from step 1
    Server URL
    https://app.sovyn.eu/api/mcp

    Mind the exact spelling of the header name: x-api-key, lower case, with hyphens.

  4. Add the note (recommended)

    Copy the following text into the Note field. It tells Manus how to work with Sovyn so the move runs through without back-and-forth.

    Note
    Sovyn migrates vibe-coded apps (Manus, Lovable, Supabase, generic) onto
    an EU stack: code migration (auto-merged into the default branch),
    EU provisioning, data cutover. Use this connector when the user wants to
    move their app to Sovyn.
    Procedure: First read the resource sovyn://migration-guide. Then call
    sovyn_get_context (if there is exactly one team: use it without asking)
    and from then on strictly follow the next_action hint from
    sovyn_get_status.
    Shared repository (most important rule):
    Sovyn writes to the GitHub repository itself — sovyn_migrate_code merges
    the codemod into the default branch via the GitHub API. Your working
    copy does not learn about that. So: before EVERY change, commit and push
    (including a dependency update or lockfile refresh), fetch first and
    rebase onto the default branch. Never force-push this branch — that
    deletes the migration commit, the repository falls back to its
    pre-migration state and the next deploy ships exactly that. A rejected
    non-fast-forward push is the safeguard working, not an obstacle: pull,
    rebase, push again.
    Important:
    - The app code must be on GitHub — if it is not, push it there first.
    - Installing the Sovyn GitHub app (sovyn_github_install_link) is a
    browser click only the user can make: hand over the link, wait for
    confirmation.
    - Poll sovyn_get_status every 15-30 seconds; analysis/migration/
    provisioning each take minutes — do not give up early.
    - The data cutover depends on the stack (next_action names the tool):
    - Manus (call_sovyn_migrate_data): pass the database credentials as a
    mysql://user:pass@host:port/db URL; if unknown, ask the user. If the
    app uses files (services.storage), they are copied to the EU bucket
    in the same step — requires BUILT_IN_FORGE_API_URL/KEY to be set
    (read them from the Manus app environment, never invent them).
    - Lovable/Supabase (call_sovyn_restore_backup): no connection string —
    instead backupUrl, a public https:// URL of the database export
    (pg_dump, optionally .zip). If the target already has data, the job
    fails with DOWN_MIGRATE_TARGET_NOT_EMPTY → call again with reset=true.
    - On confirm_deploy_plan (generic apps): confirm the fields listed in
    planNeedsReview via sovyn_confirm_deploy_plan (confirm what is certain
    yourself, ask the user about the rest), then provision.
    - On inspect_log_and_retry: read logTail/error, fix what can be fixed,
    repeat the step. On unsupported_app or missing_target_db: stop and
    explain the problem to the user.
    - After next_action=done: report the deploy URL. If the app has login
    and data was migrated, drive the user onboarding — migrated users
    cannot sign up again, they take over their account through a one-time
    claim link. Call sovyn_list_claimable_users; on case=single call
    sovyn_issue_claim_links right away (no confirmation, the link is
    emailed automatically), on case=multiple confirm the selection with
    the user. Hand every link to the person it belongs to.
  5. Save

    Click Save. Manus checks the connection and then lists the Sovyn tools, for example sovyn_get_context and sovyn_get_status. You’re all set.

Open your app’s project in Manus and write in the chat:

Migrate my app to Sovyn.

From here, Manus and Sovyn work together. Each step takes a few minutes, and Manus keeps you posted. They need you at two points:

  • Allow GitHub access: The first time, Manus gives you a link to the Sovyn GitHub app. Open it, confirm the installation and tell Manus you’re done. If your app isn’t on GitHub yet, Manus takes care of that first.
  • Take over your data: If Manus doesn’t know your database credentials, it asks you for them.

At the end, Manus tells you the address where your app now runs on Sovyn. If your app has a login, your users receive a personal link to take over their existing account. Nobody has to sign up again.

Sovyn saves the migrated code directly in your GitHub project. If Manus later suggests to “overwrite” GitHub, to “force-push” or to “sync the sandbox to GitHub”, decline. That would undo the move.

Manus shows an error or “Unauthorized” when saving

Section titled “Manus shows an error or “Unauthorized” when saving”

Check the Server URL and the header name x-api-key for typos, and make sure the key was pasted completely (it starts with sovyn_). A key is valid for one year. If it expired or was revoked, create a new one and replace it in Manus.

Check that the “Sovyn” connector is switched on in Manus, and mention Sovyn explicitly in your message, for example “Migrate my app with the Sovyn connector”.

Analysis, migration and setup each take a few minutes. Ask Manus for the status (“What’s the status at Sovyn?”). Still stuck? Write to us at hallo@sovyn.eu.