Docs

Tools Reference

Reference for every MCP tool the Grovs server exposes: projects, links, campaigns, analytics, and configuration.

Your AI assistant picks these up automatically once connected. This page lists every tool the MCP server exposes, what it takes, and what it returns.

Account

get_status

Returns the authenticated user's account info and all their Grovs projects with domains. Call this first to discover available project IDs before using other tools.

No parameters required.

Returns: User name, email, and a table of projects with instance IDs and domains (production + test). Also surfaces a usage warning when any instance has exceeded its MAU quota without a paid subscription.


get_usage

Get the MAU (monthly active users) usage for a specific instance: current count, limit, quota status, and whether the instance has a paid subscription.

instance_idstringrequired

Instance ID from get_status.

Returns: Current MAU, MAU limit, whether quota is exceeded, and whether the instance has an active paid subscription. When quota is exceeded without a subscription, a warning is appended explaining that deep links are no longer working.


Projects

create_project

Create a new Grovs project. This provisions a production and test environment with their own domains for deep links.

namestringrequired

Project name (e.g. "My App").

Returns: Instance ID, URI scheme, and the production and test project IDs.


Create a deep link in a project. Only name is required; the URL path is auto-generated from the name if you don't supply one. You can also set a title and subtitle for previews, tags for organization, and a data payload that gets passed to the app when the link is opened.

Required
project_idstringrequired

Project ID from get_status.

namestringrequired

Link name (also used to generate the URL slug).

Optional
pathstringoptional

Custom URL slug. Auto-generated from name if omitted.

titlestringoptional

Preview title shown when the link is shared.

subtitlestringoptional

Preview subtitle shown when the link is shared.

image_urlstringoptional

Preview image URL shown when the link is shared.

tagsstring[]optional

Tags for organizing links.

dataobjectoptional

JSON payload passed to the app when the link is opened.

custom_redirectsobjectoptional

Per-platform redirect overrides keyed by ios, android, and desktop. Each platform accepts three forms:

  • Omit the platform → open the app if installed, otherwise fall back to the App Store / Play Store (default behavior).
  • String (e.g. { "ios": "https://example.com" }) → open the app if installed, otherwise redirect to the given URL.
  • Object (e.g. { "ios": { "url": "https://example.com", "open_app_if_installed": false } }) → use the URL directly. Set open_app_if_installed: false to skip the app entirely and always redirect to the URL.
campaign_idnumberoptional

Campaign ID to add this link to (from list_campaigns or create_campaign).

Returns: Full link details including the generated URL, metadata, and custom redirects.


Look up a deep link by its URL path slug or full URL. Returns full link details including preview metadata, tags, data payload, and custom redirects.

project_idstringrequired

Project ID from get_status.

pathstringrequired

Link path slug (e.g. summer-sale) or full URL (e.g. https://myapp.grovs.link/summer-sale).

Returns: Full link details including name, path, preview metadata, tags, data payload, and custom redirects.


Update an existing deep link. Only include the fields you want to change.

Required
project_idstringrequired

Project ID from get_status.

link_idnumberrequired

Numeric link ID from search_links or get_link.

Optional
namestringoptional

New link name.

pathstringoptional

New URL path slug.

titlestringoptional

Preview title.

subtitlestringoptional

Preview subtitle.

image_urlstringoptional

Preview image URL.

tagsstring[]optional

Tags.

dataobjectoptional

JSON payload for the app.

custom_redirectsobjectoptional

Per-platform redirect overrides keyed by ios, android, and desktop. Same three forms as create_link:

  • Omit the platform → app + App Store fallback (default).
  • String → app if installed, otherwise the given URL.
  • Object with open_app_if_installed: false → skip the app, always use the URL.
campaign_idnumberoptional

Campaign ID to assign this link to.

Returns: Updated link details.


Archive (deactivate) a deep link. The link will stop redirecting users. This action cannot be undone.

project_idstringrequired

Project ID from get_status.

link_idnumberrequired

Numeric link ID from search_links or get_link.

Returns: The archived link details with active: false.

Archiving a link deactivates it permanently. The link URL will stop redirecting users. This cannot be undone.


Search or list all deep links in a project. Returns links with their view/open/install metrics. Supports pagination, search by name, and sorting.

Required
project_idstringrequired

Project ID from get_status.

Optional
pagenumberoptional

Page number (default: 1).

limitnumberoptional

Results per page (default: 20).

searchstringoptional

Search by link name, title, path, or tags.

sort_bystringoptional

Sort by: name, created_at, views, opens, installs.

sort_orderstringoptional

Sort direction: asc or desc.

Returns: A table of links with name, path, views, opens, installs, and active status. Includes pagination metadata.


Campaigns

create_campaign

Create a campaign to group related deep links. After creating, use create_link with campaign_id to add links to this campaign.

project_idstringrequired

Project ID from get_status.

namestringrequired

Campaign name.

Returns: Campaign ID, name, archived status, and creation date.


list_campaigns

List campaigns with aggregated metrics (views, opens, installs, revenue). Supports pagination, search by name, date range filtering, and sorting.

Required
project_idstringrequired

Project ID from get_status.

Optional
pagenumberoptional

Page number (default: 1).

per_pagenumberoptional

Results per page (default: 20).

termstringoptional

Search by campaign name.

sort_bystringoptional

Sort by: name, created_at, views, opens, installs, revenue.

ascendentbooleanoptional

Sort ascending (default: false = descending).

start_datestringoptional

Metrics start date (YYYY-MM-DD, default: 30 days ago).

end_datestringoptional

Metrics end date (YYYY-MM-DD, default: today).

platformstringoptional

Filter metrics by platform: ios, android, desktop, web.

archivedbooleanoptional

Filter by archived status.

Returns: A table of campaigns with name, ID, views, opens, installs, revenue, and archived status. Includes pagination metadata.


archive_campaign

Archive a campaign and deactivate all its links. This action cannot be undone.

project_idstringrequired

Project ID from get_status.

campaign_idnumberrequired

Campaign ID from list_campaigns.

Returns: Archived campaign details.

Archiving a campaign deactivates all links in it. The links will no longer redirect users. This cannot be undone.


Analytics

get_analytics_overview

Get aggregated analytics for a project: views, opens, installs, new/returning users, revenue. Compares current period vs previous period. Defaults to last 30 days.

Required
project_idstringrequired

Project ID from get_status.

Optional
start_datestringoptional

Start date (YYYY-MM-DD), defaults to 30 days ago.

end_datestringoptional

End date (YYYY-MM-DD), defaults to today.

platformstringoptional

Filter by platform: ios, android, desktop, web.

Returns: Current and previous period metrics including views, opens, installs, app opens, new users, returning users, returning rate, reinstalls, referred users, revenue, units sold, cancellations, ARPU, and ARPPU.


Get analytics for a specific link by its path slug or full URL: views, opens, installs, engagement time, referrals. Defaults to last 30 days.

Required
project_idstringrequired

Project ID from get_status.

pathstringrequired

Link path slug (e.g. summer-sale) or full URL (e.g. https://myapp.grovs.link/summer-sale).

Optional
start_datestringoptional

Start date (YYYY-MM-DD).

end_datestringoptional

End date (YYYY-MM-DD).

Returns: Per-link metrics: views, opens, installs, reinstalls, reactivations, app opens, referred users, and average engagement time.


Get the top performing links ranked by views. Returns each link with its view, open, and install counts. Defaults to top 10 over last 30 days.

Required
project_idstringrequired

Project ID from get_status.

Optional
start_datestringoptional

Start date (YYYY-MM-DD).

end_datestringoptional

End date (YYYY-MM-DD).

platformstringoptional

Filter by platform: ios, android, desktop, web.

limitnumberoptional

Number of links to return (default: 10).

Returns: A ranked table of links with name, path, views, opens, and installs.


Configuration

configure_redirects

Set where users land when they open a deep link. You can configure per-platform fallbacks (iOS App Store, Google Play, desktop website) and a global fallback URL for anything not matched.

Required
project_idstringrequired

Project ID from get_status.

Optional
ios_redirectstringoptional

iOS redirect URL (e.g. App Store link).

android_redirectstringoptional

Android redirect URL (e.g. Play Store link).

desktop_redirectstringoptional

Desktop fallback URL.

web_redirectstringoptional

Web fallback URL.

fallback_urlstringoptional

Global fallback URL for all platforms.

Returns: Updated redirect configuration for all platforms.


configure_sdk

Configure platform-specific SDK settings for an instance: iOS bundle ID, Android package name, desktop app URLs. Required if you want links to open the actual app instead of falling back to a URL.

Required
instance_idstringrequired

Instance ID from get_status.

Optional
ios_bundle_idstringoptional

iOS bundle identifier (e.g. com.myapp.ios).

ios_team_idstringoptional

Apple Developer Team ID.

ios_app_store_idstringoptional

iOS App Store ID.

android_package_namestringoptional

Android package name (e.g. com.myapp.android).

android_sha256_fingerprintsstring[]optional

Android SHA256 certificate fingerprints for App Links.

desktop_urlstringoptional

Desktop app download URL.

Returns: Updated SDK configuration for all platforms.


Security

The MCP server uses OAuth 2.1 with PKCE (S256) for all authorization. Tokens are automatically refreshed and can be revoked from Account Settings → Connected Apps in the dashboard.

  • All tools require authentication. There is no anonymous access
  • PKCE is mandatory on every OAuth flow
  • Access tokens expire after 1 hour and are auto-refreshed
  • Refresh tokens expire after 90 days of inactivity
  • Connections can be revoked anytime from the dashboard

For self-hosters: dynamic client registration is open by design (per RFC 7591). A registered client_id alone grants no access; users must still authenticate and consent. Registration is rate-limited to 5 per minute per IP. To restrict it further, add IP allowlisting at the reverse proxy level.