← All documentationContents ↓

MCP Server

Connect Claude, ChatGPT, Claude Code, and other MCP-compatible AI assistants to Simply360 through the hosted remote MCP endpoint.

What Is MCP?

The Model Context Protocol (MCP) is an open standard that lets AI assistants connect to external data sources and tools. Simply360 exposes a hosted Streamable HTTP MCP endpoint, so MCP-compatible clients can inspect your team's schema and work with your team's data through the same public API, permissions, and audit boundaries used by first-party clients.

Hosted Endpoint

Use the hosted remote MCP endpoint for the Simply360 environment you are connecting to instead of installing a local Simply360 stdio package:

EnvironmentMCP server URLAvailability
Productionhttps://api.simply360.app/v1/mcpThe default environment.
Staginghttps://api.staging.simply360.app/v1/mcpA paid add-on or an included benefit of a specific offer.
Developmenthttps://api.dev.simply360.app/v1/mcpA separate, limited developer-preview add-on or approved beta grant.

Access to Staging and Development is not included automatically with a production Simply360-powered app. Development is also not included with Staging. The selected Team Admin or Team User must have explicit access to the same environment as the endpoint. See Environments for the full access and credential model.

The endpoint is stateless: each MCP request is a plain HTTP POST and the response is returned as buffered JSON (there is no server-side session to resume, and GET/DELETE return 405). Per the MCP specification, clients should send Accept: application/json, text/event-stream. Supported MCP protocol versions are 2025-11-25 (default), 2025-06-18, and 2024-11-05.

Authentication

Use OAuth when your MCP client supports connector authorization. OAuth lets each Team Admin or Team User connect with their own Simply360 identity, and requested scopes are still intersected with their Simply360 feature and data permissions. MCP clients discover the OAuth configuration automatically from /.well-known/oauth-protected-resource on the API host; authorization is handled by Simply Login and supports PKCE and dynamic client registration.

Get an OAuth Client ID or Client Key Manually

Some MCP clients do not complete dynamic client registration from discovery and instead ask for an OAuth Client ID, sometimes labeled an OAuth Client Key, plus an OAuth Client Secret. These values are not a Simply360 API key. Create them from the OAuth registration endpoint for the same environment as the MCP server:

EnvironmentOAuth registration endpoint
Productionhttps://api.simplylogin.app/oauth/register
Staginghttps://api.staging.simplylogin.app/oauth/register
Developmenthttps://api.dev.simplylogin.app/oauth/register

For Claude, register its current remote-connector callback URI and request a confidential client:

S360_OAUTH_REGISTRATION_URL="https://api.simplylogin.app/oauth/register"

curl -sS -X POST "$S360_OAUTH_REGISTRATION_URL" \
  -H "Content-Type: application/json" \
  -d '{
    "client_name": "Claude",
    "redirect_uris": ["https://claude.ai/api/mcp/auth_callback"],
    "scope": "schema:read records:read records:write websites:read websites:write conversations:read conversations:write files:write wizards:run admin:read offline_access",
    "token_endpoint_auth_method": "client_secret_basic"
  }' | jq .

The registration response includes both values Claude needs:

{
  "client_id": "s360_mcp_client_...",
  "client_secret": "s360_oauth_cs_...",
  "token_endpoint_auth_method": "client_secret_basic"
}
  • Put client_id in Claude's OAuth Client ID field. If another client calls the field OAuth Client Key, use this same client_id value.
  • Put client_secret in OAuth Client Secret. It is returned only when the client is registered, so store it in your organization's secrets manager or complete setup immediately.
  • Use the registration endpoint and MCP URL from the same environment. Never reuse a production OAuth client in Staging or Development, or a non-production client in production.
  • Request only the scopes the connector needs. The example requests every currently supported hosted MCP scope; remove write or admin scopes for a narrower connector.

A public MCP client that can perform Authorization Code with PKCE without holding a secret may register with "token_endpoint_auth_method": "none". In that case the response contains a client_id but no client_secret.

For server-side or local developer tooling, clients that support remote HTTP MCP headers can authenticate with a scoped Simply360 API key:

Authorization: Bearer s360_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxx

Use API keys only for server-to-server or local development workflows. Prefer OAuth for user-facing assistants. For API-key callers, route access comes from the key's explicit scoped feature permissions, and MCP record access additionally comes from the API key's selected Data Role (teamRoleSimplyId in the API Keys API), not from the key's scoped feature-permission JSON alone.

Connecting A Client

In any MCP client that supports remote Streamable HTTP servers, add a server with:

  • Server URL: the production, Staging, or Development MCP URL from the table above
  • Transport: Streamable HTTP
  • Auth: OAuth connector flow, or an Authorization: Bearer ... header for API-key tooling

Claude

For an individual Claude plan, open Customize → Connectors, choose Add custom connector, and enter the MCP server URL. For a Claude Team or Enterprise organization, an Owner adds it under Organization settings → Connectors. If Claude does not discover and register the OAuth client automatically, open Advanced settings and paste the manually registered client_id and client_secret from the steps above. See Anthropic's custom connector setup guide for its current menu names and plan requirements.

Some local-only clients can connect to a remote MCP server through a generic remote-MCP bridge. In that case, configure the bridge with the same URL and authorization header above.

Working Across Multiple Teams

If you belong to more than one Simply360 team, one connection can cover them. On the authorization screen, pick your primary team and check any additional teams under "Also authorize these teams". The resulting connection can act on every team you selected — each request simply names the team it targets:

  • MCP tools: call list_my_teams to see the teams the connection covers, then pass one of the returned teamSimplyId values as the teamSimplyId argument on every other tool call. Multi-team connections require the argument on each call (there is no implicit "active team" — the endpoint is stateless by design); single-team connections can omit it. Tool results echo the team they acted on.
  • REST API: the same token may target any authorized team per request with the X-Team-Id header (or ?teamSimplyId=). Requests without a team header use the primary team.

Team membership is re-validated on every call: a team you leave stops working immediately even if it was authorized, and teams you join after connecting are not included until you re-authorize. Teams you did not select at consent are always rejected. To change the authorized set, reconnect and choose again.

Alternative: One Connector Per Team

Clients that de-duplicate connectors by exact URL (such as claude.ai) also accept the same server under team-qualified URLs, so you can instead add one connector per team and authorize each for a single team:

https://api.simply360.app/v1/mcp?teamSimplyId=TEAM_A
https://api.simply360.app/v1/mcp?teamSimplyId=TEAM_B

Each connector then carries its own single-team authorization and needs no teamSimplyId tool argument. This is the right shape when you want hard separation between teams in your client's connector list; the multi-team connection above is the recommended default.

Available Tools

The hosted server exposes a curated toolset instead of every public API endpoint, organized into seven families: data, AI record import, billing, file upload, Website Studio, signing requests, and Simply Spaces. Tool names are stable and use public Simply IDs for all entity references. Each tool requires the OAuth scope listed below (API-key callers are checked against the equivalent feature and Data Role permissions). Every tool also accepts the optional teamSimplyId team-selection argument described above.

Data Tools

ToolScopeDescription
list_my_teamsList the teams this connection can act on, with the primary marked. Multi-team connections use the returned teamSimplyId values on every other tool call.
list_data_collectionsschema:readList data collections visible to the authenticated caller.
get_data_collectionschema:readGet one data collection and its readable field definitions.
list_data_recordsrecords:readList records in a collection by dataCollectionSimplyId.
get_data_recordrecords:readGet one record by dataRecordSimplyId.
search_data_recordsrecords:readSearch records with metadata and custom-field filters.
create_data_recordrecords:writeCreate a record in a collection when the caller has write access.
update_data_recordrecords:writeUpdate field values on a record when the caller has write access.
archive_data_recordrecords:writeArchive a record from a collection when the caller has delete/archive access.
list_data_viewsschema:readList saved data views visible to the caller.
get_data_viewschema:readGet one data view definition by dataViewSimplyId.

AI Record Import Tools

The AI import tools mirror Ask Simply's import capability. They are proposal-handle tools (records:write): a call does not compose or create records directly. It re-checks that the caller can create (or, for undo, archive) records, then returns a proposal-control handle ({ proposalRequired: true, approvalSurface: "ASK_SIMPLY", requestedToolName, summary, riskLevel, requiredPermissions, affectedResources, arguments }). Composition (background) and the transactional graph save run only after the proposal is approved through the same Ask Simply proposal-approval path, where permissions are re-checked and the engine enforces the per-collection CREATE_DATA_RECORDS gate. The targetKey is always re-resolved server-side; discover writable collections with list_data_collections and build a generic key such as generic.auto or generic.collection.<dataCollectionSimplyId>.

ToolScopeDescription
draft_import_recordsrecords:writeDraft an import of a connected record graph into a resolved target from pasted text, staged attachments, and/or URLs. Returns a proposal-control handle.
draft_undo_importrecords:writeDraft a reversal of a previously executed import by archiving (never hard-deleting) exactly the records it created. Returns a proposal-control handle.

DataWizard-steered "Recommended" import targets are surfaced only through Ask Simply and the first-class GET /v1/data-records/ai-graph/targets API; the hosted MCP surface intentionally exposes generic targets (discoverable via list_data_collections) rather than duplicating the service-local target registry.

Billing Tools

Read-only team billing tools. They require the admin:read scope plus the TEAM_ADMIN_BILLING feature permission:

  • get_team_billing_status — selected-team billing status
  • list_team_billing_invoices — invoice summaries
  • get_team_billing_invoice_receipt — receipt detail for one invoice
  • get_team_billing_next_invoice_estimate — preview of the next invoice, without creating charges

File Upload Tool

request_file_upload requires edit-qualified TEAM_ADMIN_MEDIA_LIBRARY permission. OAuth callers also require files:write; API-key callers have no OAuth scopes and remain constrained by their explicit feature permission. The tool returns a Simply360 browser URL for the selected team. The assistant asks the user to open that signed-in page, choose a local file, wait for quarantine scanning and promotion, and then provide the displayed public File Simply ID.

This is intentionally a human browser handoff: MCP messages and model-visible tool results never contain the local file bytes, private storage key, quarantine bucket, or presigned POST credentials. The browser uses the same checksum-bound, GuardDuty-scanned upload API as the first-party webapp. The tool is write-capable and disappears when hosted MCP write tools are disabled.

Website Studio Tools

Website Studio tools require the TEAM_WEBSITES or TEAM_ADMIN_WEBSITES feature permission in addition to website-level role permissions.

Read tools (websites:read) cover websites, templates, pages, page design and blocks, versions, comments, access areas, permissions, experiments, data resources, publish readiness, style kits, media files, background tasks, and backups: list_websites, get_website, list_website_templates, get_website_template, get_website_studio_context, list_website_pages, get_website_page, get_website_page_design, list_website_page_blocks, list_website_page_versions, list_website_comments, list_website_access_areas, list_website_permissions, list_website_experiments, list_website_data_resources, run_website_publish_readiness, list_style_kits, get_style_kit, list_media_files, get_media_file, get_website_background_task, list_website_backups, get_website_backup.

Draft (proposal) tools (websites:write) do not change a website directly. Each call records a draft proposal; the proposal is validated and executed through the Website Studio proposal workflow, where the caller's website permissions and backup requirements are re-checked at execution time. The draft tools are:

AreaTools
Sites & pagesdraft_create_website, draft_copy_website, draft_update_website, draft_delete_website, draft_create_website_page, draft_update_website_page_metadata, draft_reorder_website_pages, draft_delete_website_page
Navigation & chromedraft_update_website_navigation, draft_update_website_header, draft_update_website_footer, draft_update_website_theme
Style kitsdraft_assign_style_kit, draft_create_style_kit, draft_update_style_kit, draft_copy_style_kit
Versions & backupsdraft_create_page_version_checkpoint, draft_restore_page_version, draft_create_website_backup, draft_restore_website_backup
Page design & blocksdraft_patch_website_page_design, draft_insert_website_block, draft_insert_website_layout, draft_update_website_block, draft_delete_website_block, draft_insert_data_view_block, draft_insert_data_wizard_block, draft_attach_media_to_website_block
AI-assisted rewritesdraft_rewrite_website_selection, draft_redesign_website_page, draft_redesign_website
Access & experimentsdraft_create_or_update_access_area, draft_update_website_permissions, draft_create_or_update_experiment
Workflow & publishingdraft_start_website_translation, draft_submit_page_for_review, draft_request_page_changes, draft_publish_website_page, draft_publish_website_header_footer, draft_publish_website
Importdiscover_external_website_pages

Signing Request Tools

  • list_signing_requests, get_signing_request (records:read) — read signing requests through source-collection data permissions
  • create_signing_request, resend_signing_request (records:read + records:write) — create a signing request or reissue signer links
  • void_signing_request (records:write) — void an in-flight signing request

Simply Spaces Tools

  • list_simply_spaces_booking_channels (schema:read, requires the SIMPLY_SPACES_VIEW or SIMPLY_SPACES_MANAGE feature permission) — list booking-channel configuration and durable link references

Write-capable tools (record writes, file-upload handoff, signing writes, and the website draft tools) can be centrally disabled; when disabled they are not advertised by the server.

Resources

The server also exposes the current team's schema as an MCP resource at simply360://team/schema (scope schema:read). This gives assistants collection and field context without requiring them to discover schema one endpoint at a time.

MCP resources take no arguments, so on a multi-team connection this resource always reflects the connection's primary team (the payload names which team it describes). To explore another authorized team's schema, use the team-scoped list_data_collections and get_data_collection tools with that team's teamSimplyId instead.

Tool Permissions

Whether a tool succeeds depends on the authenticated caller. OAuth callers are constrained by requested OAuth scopes and their Team Admin or Team User permissions. API-key callers are constrained by the key's explicit scoped feature permissions and selected Team Role data permissions. File upload requires edit-qualified TEAM_ADMIN_MEDIA_LIBRARY; Website Studio tools additionally require the TEAM_WEBSITES or TEAM_ADMIN_WEBSITES feature permission, billing tools require TEAM_ADMIN_BILLING, and Simply Spaces tools require SIMPLY_SPACES_VIEW or SIMPLY_SPACES_MANAGE. MCP never grants permissions that the caller does not already have in Simply360.

Simply Action Tags Boundary

The hosted MCP surface does not expose new standalone Action Tags mutation, CSV import, billing, payment-method, custom-domain, webhook-secret, Action Credential issuance, or credential-presentation tools. This is intentional: imports and plan changes have idempotency/customer-confirmation requirements, domains mutate external routing, and credential payloads are bearer material.

An eligible developer can use the documented Action Tags Public API or TypeScript SDK for plan-gated Action-only operations. MCP cannot bypass the 500-Action API allowance or unlock Simply360-powered record/Wizard connections. Ask Simply/TeamAgent has a separate proposal-gated Action surface.

Security Considerations

  • Prefer OAuth for assistants used by individual team members.
  • Treat API keys as production secrets: rotate them regularly and never commit them to source control.
  • Use read-only or narrowly scoped keys for local development when write tools are not needed.
  • Restrict API keys to known source IP addresses for server-side MCP clients.

Example Conversation

Once connected, an assistant can call MCP tools transparently:

User: How many contacts were added this week?

Assistant: (calls list_data_collections, picks the Contacts collection, then calls search_data_records) 23 contacts have been added in the last 7 days.