notifly
Agent setup / OpenCode

Set up Notifly in OpenCode.

The fastest path: copy the sentence and paste it into OpenCode — it runs every step below itself. Or follow the steps by hand.

Add to Claude
01 — Add the MCP server

No key goes into the MCP config — the server signs OpenCode in with OAuth 2.1.

  • opencode.json or opencode.jsonc (project root)
jsonc — MCP config
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "notifly": {
      "type": "remote",
      "url": "https://api.notifly.io/mcp",
      "enabled": true
    }
  }
}
bash — then sign in
opencode mcp auth notifly
02 — Sign in

opencode mcp auth notifly opens the Notifly sign-in and consent page in the browser (OpenCode also starts it on its own when the server first answers 401).

On the consent screen you choose what OpenCode may do; it can never exceed your own role.

Checked against OpenCode’s MCP documentation.

03 — Secret key and SDK

Your code authenticates with the environment’s secret key (https://app.notifly.io → choose the environment (Development or Production) in the sidebar → API Keys → Secret Keys (an agent connected to the Notifly MCP server can create one with create_api_key)). Keep it in a git-ignored .env as NOTIFLY_SECRET_KEY.

MCP tools

  • core (8)

    get_subscriber, get_workflow, list_notifications, list_organizations, list_subscribers, list_topics, list_workflows, trigger_workflow

  • account (12)

    change_email, change_password, delete_account, disconnect_sign_in_method, export_data, get_profile, get_referral_summary, list_sign_in_methods, set_onboarding_state, update_notification_prefs, update_profile, update_referral_ui_state

  • agents (46)

    add_agent_integration, cancel_human_interaction, configure_agent_photon_webhook, configure_agent_sendblue_webhook, configure_agent_whatsapp_webhook, create_agent, create_agent_skill, create_human_interaction, create_slack_setup_link, delete_agent, disable_agent_mcp_server, enable_agent_mcp_server, ensure_agent_provider_vault, generate_agent, generate_agent_mcp_oauth_url, get_agent, get_agent_conversation_usage, get_agent_demo_quota, get_agent_mcp_connection, get_agent_runtime_config, get_agent_usage, get_human_interaction, list_agent_emoji, list_agent_integrations, list_agent_mcp_servers, list_agents, list_human_contacts, list_human_interactions, migrate_agent_runtime, register_agent_photon_recipient, remove_agent_integration, remove_agent_photon_webhooks, remove_agent_sendblue_webhooks, send_agent_welcome_message, set_agent_inbox_shared, set_agent_mcp_servers, setup_human_channel, test_agent_email, test_agent_photon_message, test_agent_sendblue_message, test_agent_whatsapp_template, update_agent, update_agent_bridge, update_agent_integration, update_agent_runtime_config, verify_agent_credentials

  • billing (5)

    billing_status, list_plans, manage_subscription, start_pro_trial, upgrade_plan

  • connections (40)

    claim_slack_marketplace_install, configure_integration_webhook, create_channel_connection, create_channel_endpoint, create_integration, create_mobile_link, create_vercel_integration, delete_channel_connection, delete_channel_endpoint, disconnect, disconnect_sendly, get_channel_connection, get_channel_endpoint, get_connect_links, get_in_app_status, get_msteams_deploy_url, get_msteams_health, get_provider_limit, get_sendly_config, get_vercel_integration, get_webhook_support_status, get_whatsapp_signup_availability, link_channel_endpoint, list_channel_connections, list_channel_endpoints, list_connected_apps, list_connections, list_sendly_domains, list_sendly_projects, list_vercel_projects, preview_slack_marketplace_claim, reverify, revoke_connected_app, set_primary_integration, slack_quick_setup, update_channel_connection, update_channel_endpoint, update_integration, update_vercel_integration, validate_whatsapp_token

  • content (40)

    create_context, create_environment_variable, create_feed, create_layout, create_notification_group, create_tenant, create_workflow_override, delete_context, delete_environment_variable, delete_feed, delete_layout, delete_notification_group, delete_tenant, delete_workflow_override, duplicate_layout, get_context, get_environment_variable, get_environment_variable_usage, get_layout, get_layout_usage, get_notification_group, get_tenant, get_workflow_override, get_workflow_override_for_tenant, list_contexts, list_environment_variables, list_feeds, list_layouts, list_notification_groups, list_tenants, list_workflow_overrides, preview_layout, set_default_layout, set_workflow_override_for_tenant, update_context, update_environment_variable, update_layout, update_notification_group, update_tenant, update_workflow_override

  • environments (27)

    approve_cli_device, claim_connect_session, create_domain, create_domain_route, create_environment, create_webhook_portal_token, delete_domain, delete_domain_route, delete_environment, diagnose_domain, diff_environment, get_current_environment, get_domain, get_domain_auto_configure, get_domain_route, get_environment_tags, get_mx_status, list_domain_routes, list_domains, list_environments, publish_environment, start_domain_auto_configure, test_domain_route, update_domain, update_domain_route, update_environment, verify_domain

  • events (15)

    broadcast_event, cancel_trigger, delete_message, delete_messages_by_transaction, get_activity_charts, get_execution_details, get_notification, get_notification_stats, get_request_traces, get_workflow_run, list_messages, list_request_logs, list_workflow_runs, send_test_email, trigger_bulk

  • keys (7)

    create_api_key, list_api_keys, list_granted_scopes, request_scopes, revoke_api_key, rotate_api_key, set_api_key_tiers

  • misc (6)

    delete_preferences, get_blueprint, get_preferences, get_upload_url, list_blueprints, upsert_preferences

  • security (8)

    create_scim_directory, delete_scim_directory, delete_sso_connection, export_audit_logs, get_sso_config, list_audit_logs, update_sso_settings, upsert_sso_connection

  • subscribers (20)

    bulk_create_subscribers, bulk_update_subscriber_notifications, bulk_update_subscriber_preferences, complete_notification_action, count_subscriber_notifications, create_subscriber, delete_all_subscriber_notifications, delete_subscriber, delete_subscriber_credentials, delete_subscriber_notification, get_subscriber_preferences, list_subscriber_notifications, list_subscriber_topics, register_device_token, remove_device_token, set_subscriber_credentials, set_subscriber_online_status, update_subscriber, update_subscriber_notification, update_subscriber_preferences

  • support (2)

    create_support_ticket, list_support_tickets

  • team (16)

    bulk_invite_members, create_team, delete_team, get_organization, get_organization_settings, invite_member, list_invites, list_members, list_my_organizations, remove_member, rename_organization, resend_invite, revoke_invite, update_member_role, update_organization_branding, update_organization_settings

  • topics (9)

    add_topic_subscriptions, delete_topic, get_topic, get_topic_subscription, list_topic_subscriptions, remove_topic_subscriptions, update_topic, update_topic_subscription, upsert_topic

  • workflows (33)

    apply_change, apply_changes, bridge_stateless, bridge_stateless_preview, bridge_status, bridge_sync, count_changes, create_workflow, delete_translation_group, delete_workflow, diff_bridge, disconnect_step_resolver, duplicate_workflow, get_master_translations, get_step_controls, get_step_resolver_count, get_translation, get_translation_group, get_workflow_step, get_workflow_test_data, get_workflow_variables, list_changes, list_translations, patch_workflow, preview_bridge_step, preview_email_template, preview_workflow_step, save_translation, set_step_controls, sync_workflow, test_http_request, update_workflow, validate_bridge_url

Server SDKs

Any other language calls the REST API directly — see the API reference.

04 — Verify

Run it from the project root: the first two lines load NOTIFLY_SECRET_KEY from .env and stop if it is empty, then the request prints HTTP 200 and a body containing totalCount. A 401 with the key loaded means the key is wrong or belongs to a different environment. Inside the agent, calling the list_workflows tool proves the MCP sign-in the same way.

bash — verify
if [ -f .env ]; then set -a; . ./.env; set +a; fi
: "${NOTIFLY_SECRET_KEY:?NOTIFLY_SECRET_KEY is not set: store it in .env first (step 1)}"
curl -sS -w "\nHTTP %{http_code}\n" -H "Authorization: ApiKey $NOTIFLY_SECRET_KEY" "https://api.notifly.io/v2/workflows?limit=1"

The agent reads notifly.io/agent-setup/prompt.md — plain markdown you can read too. Optional next step: to wire a Notifly agent into Slack, Microsoft Teams or another channel, follow notifly.io/agents.md.