Quickstart

From an MCP server you already run to a validated customer deployment. Eight steps, all of them on the REST API, so the same sequence runs from your pipeline.

Before you start

You need three things.

  • An API key. Create one in the dashboard under Settings, or with POST /v1/auth/api-keys. The plaintext key is returned once and never again.
  • A source. A reachable MCP server, an OpenAPI document, or a repository Meetext can scan. Any one of the three is enough.
  • A destination app. Whichever destination you are targeting credentials for your own app registration, configured on the product's target. Your customers authorize your app, not ours.
Shell
export MEETEXT_API_KEY="mtx_live_..."
export MEETEXT_API="https://api.meetext.xyz"

1. Create a product

A product is your software as Meetext represents it. The slug is permanent: it becomes part of the hosted MCP endpoint URL that customers point their clients at.

Shell
curl -X POST "$MEETEXT_API/v1/products" \
  -H "authorization: Bearer $MEETEXT_API_KEY" \
  -H "content-type: application/json" \
  -d '{"name": "Acme AI", "slug": "acme-ai"}'
The response carries the product id used by every call below.

2. Connect a source

Connecting a source runs discovery. Meetext introspects the surface, normalizes every operation it accepts into one internal capability format, and records every operation it refused along with the reason.

Shell
curl -X POST "$MEETEXT_API/v1/products/$PRODUCT_ID/sources" \
  -H "authorization: Bearer $MEETEXT_API_KEY" \
  -H "content-type: application/json" \
  -d '{
    "type": "mcp",
    "mcp": {
      "url": "https://acme.example.com/mcp",
      "auth_scheme": "Bearer",
      "auth_token": "'"$ACME_TOKEN"'"
    },
    "discover_now": true
  }'

Pass discover_now: true to run discovery inline and get the capability list back in the same response. Leave it out and discovery is queued, which is the right choice for a repository scan.

The credential you send is written straight to Secret Manager. The source row keeps only the secret name.

3. Approve capabilities

List what was discovered, then decide. Every capability arrives with a risk level derived by rules: read, write or destructive.

Shell
curl "$MEETEXT_API/v1/products/$PRODUCT_ID/capabilities" \
  -H "authorization: Bearer $MEETEXT_API_KEY"

# Selecting a capability is one call.
curl -X POST \
  "$MEETEXT_API/v1/products/$PRODUCT_ID/capabilities/$CAP_ID/selection" \
  -H "authorization: Bearer $MEETEXT_API_KEY" \
  -H "content-type: application/json" \
  -d '{"enabled": true}'

# A write or destructive capability needs a second, explicit approval.
curl -X POST \
  "$MEETEXT_API/v1/products/$PRODUCT_ID/capabilities/$CAP_ID/approval" \
  -H "authorization: Bearer $MEETEXT_API_KEY" \
  -H "content-type: application/json" \
  -d '{"approved": true}'

Selecting a read capability approves it. The second call exists so that exposing something which mutates a customer's data is never a side effect of a checkbox. See Capabilities for the classification rules.

4. Publish

Preflight first. It reports anything that would make an installation fail: no destination configured, no approved capability, missing destination credentials.

Shell
curl "$MEETEXT_API/v1/products/$PRODUCT_ID/preflight" \
  -H "authorization: Bearer $MEETEXT_API_KEY"

curl -X POST "$MEETEXT_API/v1/products/$PRODUCT_ID/publish" \
  -H "authorization: Bearer $MEETEXT_API_KEY"
Publishing freezes the approved set into a versioned deployment package.

Publishing is what makes a change reach customers. Until you publish, approving a new capability changes nothing for anyone already installed.

5. Create a customer

A customer is the enterprise. A customer environment is that enterprise plus one product plus one destination, and it is the unit your plan counts.

Shell
curl -X POST "$MEETEXT_API/v1/customers" \
  -H "authorization: Bearer $MEETEXT_API_KEY" \
  -H "content-type: application/json" \
  -d '{"name": "Nike", "slug": "nike"}'

curl -X POST "$MEETEXT_API/v1/customers/$CUSTOMER_ID/environments" \
  -H "authorization: Bearer $MEETEXT_API_KEY" \
  -H "content-type: application/json" \
  -d '{"product_id": "'"$PRODUCT_ID"'", "target_kind": "slack"}'

7. Watch it validate

Authorization completing is not success. When the customer returns from the destination, Meetext runs the validation suite: it authenticates with the new credential, compares the granted scopes against what the approved capabilities need, confirms the installation identity the destination reported is actually present, round trips its own MCP endpoint with this environment's token, lists tools, and executes a read only capability end to end.

Shell
curl -X POST "$MEETEXT_API/v1/deployments/$DEPLOYMENT_ID/validate" \
  -H "authorization: Bearer $MEETEXT_API_KEY"

curl "$MEETEXT_API/v1/deployments/$DEPLOYMENT_ID" \
  -H "authorization: Bearer $MEETEXT_API_KEY"
Each check returns an observation, and where it failed, the exact remediation.

Only when those observations hold does the deployment become healthy. A failure lands you in a state that names who has to act: authorization_required for a missing scope, degraded when a dependency is down, failed when the deployment itself cannot work. See Deployments.

8. Make a real call

The customer environment has its own bearer token for the hosted MCP endpoint. Fetch it once and hand it to whichever client the customer uses.

Shell
curl "$MEETEXT_API/v1/environments/$ENV_ID/mcp-token" \
  -H "authorization: Bearer $MEETEXT_API_KEY"

curl -X POST "https://mcp.meetext.xyz/mcp/products/acme-ai" \
  -H "authorization: Bearer $MCP_TOKEN" \
  -H "content-type: application/json" \
  -H "accept: application/json, text/event-stream" \
  -d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}'

The tools that come back are the ones in this environment's deployment package, not the live capability list. A source that changes shape tomorrow cannot change what this customer sees until you publish again.

Where to go next

  • Sources for what each source type imports and refuses.
  • Hosted MCP endpoint for the protocol surface your customers' clients speak.
  • Security model for the page your customer's security team will ask for.