Skip to content

Technical reference

Partner MCP server

Setting this up for yourself? The short version is at Connect your AI assistant. This page is the detail behind it.

The Partner Portal is a Model Context Protocol server over plain HTTP. Connect Claude, Cursor or any MCP client with a personal access token and work with the portal in conversation: “register this deal”, “find the AISG battlecard”, “how much MDF do we have left”.

How it works

  • Transport: JSON-RPC 2.0 over HTTPS POST (MCP protocol version 2025-06-18). GET on either URL returns a discovery document.
  • Authentication: Authorization: Bearer <token> on every request. There is nothing public; a missing or bad token gets a 401.
  • Tokens are personal. Every call is attributed to you, rate-limited to 300 calls a minute per token, and recorded. Revoke a token from the page you created it on and it stops working on the next call.
  • Your permissions are checked live on every call: if your account is disabled or your partner is suspended, the token stops working immediately.
  • Tools that write (marked below) do exactly what the equivalent portal action does, including the emails they trigger. Your assistant should confirm with you before calling them.

Server

Scoped to your partner company: register and track deals, see your pipeline, find collateral, request marketing funds, check rewards, tier progress, training and announcements.

https://partners.culture.ai/api/mcp/partner

Get a token

Sign in to the portal and open Account. Create an access token, give it a name (“Claude on my laptop”), and copy it - it is shown once.

Claude Desktop

Settings → Developer → Edit Config, then add the server to mcpServers. Restart Claude Desktop.

{
  "mcpServers": {
    "cultureai-partners": {
      "url": "https://partners.culture.ai/api/mcp/partner",
      "headers": {
        "Authorization": "Bearer <your access token>"
      }
    }
  }
}

Claude Code

claude mcp add --transport http cultureai-partners https://partners.culture.ai/api/mcp/partner --header "Authorization: Bearer <your access token>"

Cursor

Add to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global).

{
  "mcpServers": {
    "cultureai-partners": {
      "url": "https://partners.culture.ai/api/mcp/partner",
      "headers": {
        "Authorization": "Bearer <your access token>"
      }
    }
  }
}

Tools (26)

whoami
Who this token belongs to: your partner company (name, type, status, tier, currency) and the signed-in user (name, email, role, functions), plus the deal-protection window in days, the portal URL and the CultureAI partner team's email address. Call this first so you know which partner every other tool is scoped to and which currency amounts are in. Read-only.
register_dealwrites
Register a new sales opportunity (deal registration) for your company with CultureAI, so the customer is protected for you. Use when the user wants to register, log or protect a deal; check list_my_registrations first so the same customer is not registered twice. customerCompany, customerDomain, customerEmployees and product are required; ask for them if the user has not said. Creates a SUBMITTED registration that CultureAI reviews, runs the channel-conflict check, notifies CultureAI's partner team by email and records the engagement. Returns id, status, a plain-English conflictNote and the portal URL. Confirm with the user before calling.
list_my_registrations
Your company's deal registrations, newest first by default: id, status, customer, product, estimated value, dates, protection expiry and a conflictNote where CultureAI has flagged that the customer is already covered. Use it to find registration ids, to check whether a customer is already registered before register_deal, or to answer "what is awaiting review". Filter by status, q and since/until (createdAt); sort and page with limit/offset. Rows are in `registrations`. For one registration in full use get_registration. Read-only.
get_registration
One of your company's deal registrations in full by id: customer and contact details, value, use case, notes, status, CultureAI's decision note, protection expiry, the deal stage once approved, a conflictNote if the customer was already covered, and the comment thread with CultureAI. Use it to answer "what happened to X" and before commenting or withdrawing. Ids come from list_my_registrations. Read-only.
comment_on_registrationwrites
Add a comment from your company to one of your deal registrations. Use it to answer a NEEDS_INFO question from CultureAI (this automatically puts the registration back in their review queue as SUBMITTED) or to give an update. Creates a comment CultureAI's partner team sees in the portal and mirrors it onto CultureAI's deal record once one exists; it cannot be edited or deleted afterwards. Returns the comment id and the registration's status. Ids come from list_my_registrations. Confirm with the user before calling.
withdraw_registrationwrites
Withdraw one of your company's deal registrations that is still awaiting review (status SUBMITTED or NEEDS_INFO), for example when the opportunity has gone away or it was registered by mistake. Sets it to WITHDRAWN; this cannot be undone and the customer loses any protection from this registration. APPROVED registrations cannot be withdrawn here: contact CultureAI's partner team (email in whoami). Ids come from list_my_registrations. Confirm with the user before calling.
ask_cultureai_for_helpwrites
Ask CultureAI's partner team for help with a deal: pricing or commercials, a technical or product question, a competitive situation, joining a customer meeting, an introduction to the deal owner, or anything else. Use when the user is stuck and wants CultureAI to act, not for questions the collateral or courses already answer (try search_collateral first). Posts to CultureAI's internal channel, creates a task for the deal owner, and opens a thread the user can follow in the portal; replies are emailed to the user. Optionally tied to one of your registrations (id from list_my_registrations). Returns the request id and portal URL. Confirm the subject and text with the user before calling.
list_help_requests
Your company's requests for help to CultureAI's partner team, newest first, with status (OPEN = waiting on CultureAI, ANSWERED = CultureAI replied, CLOSED) and reply counts. Read-only.
close_help_requestwrites
Mark one of your help requests as resolved (id from list_help_requests). Use when the user says CultureAI has sorted it or they no longer need the help. Only the person who asked, or a partner admin, can close it; CultureAI's partner team is told. Confirm with the user before calling.
my_pipeline
Your company's pipeline with CultureAI: registration counts by status, estimated pipeline value, approved value, closed-won count and value, plus the deals CultureAI attributes to your company (name, stage, amount, close date, won/lost, linked registration). Use for "how is our pipeline", "what have we closed" or "what stage is the X deal at". The summary always covers everything; view, q, since/until (closeDate), sort, limit and offset filter only the `deals` list. Read-only.
search_collateral
Search your company's collateral library: sales decks, battlecards, one-pagers, case studies, campaigns, pricing, technical, legal and brand assets visible to your tier, partner type and the user's function. Use it to find something to send a prospect or to get an asset id. Filter by q (keyword), category (exact name; the response's `categories` lists them with counts), kind and since/until (updatedAt); sort and page with limit/offset. Omit every filter to browse the whole library. Each row has a downloadUrl the user opens in their signed-in browser. Rows are in `assets`. Read-only.
get_collateral_link
The download link for one collateral item by id, with its title, category, file name, type and size. The link is `<portal>/api/assets/<id>/download` and only works in a browser where the user is signed in to the portal, so hand it to the user rather than trying to fetch it. Link-type assets (videos, external decks) also return externalUrl, which opens directly. Ids come from search_collateral. Read-only.
mdf_summary
Your company's marketing development funds (MDF) position for the current allowance period: allowance, approved (committed), pending (requested and undecided), available, currency and period dates. Use for "how much MDF do we have left" and before request_mdf so the amount fits. MDF is a benefit for ACTIVE partners; the allowance comes from your tier (see my_tier). Read-only.
list_mdf_requests
Your company's MDF requests, newest first by default: id, title, activity type, status, amounts requested and approved, planned date, claim and ROI deadlines, who requested it and CultureAI's decision note. Use it to find request ids and see what is approved, waiting or due a claim. Filter by status, q (title) and since/until (createdAt); sort and page with limit/offset. Rows are in `requests`. For one request with its full timeline use get_mdf_request. Read-only.
get_mdf_request
One of your company's MDF requests in full by id: description, expected outcome, amounts, CultureAI's decision, claim and ROI figures, payment reference, attachments (names only; files are uploaded and viewed in the portal) and the event timeline of submissions, comments and decisions from both sides. Use it before comment_on_mdf or submit_mdf_claim, or to answer "what did CultureAI say about our webinar request". Ids come from list_mdf_requests. Read-only.
request_mdfwrites
Submit a new MDF (marketing development funds) request for your company, for an event, webinar, campaign, content, training or other activity. Check mdf_summary first so amountRequested fits the available allowance. Creates a SUBMITTED request that CultureAI reviews and notifies CultureAI's partner team by email. Returns the request id, status and portal URL. Proposals, proof and invoices are uploaded in the portal, not here. Confirm with the user before calling.
comment_on_mdfwrites
Add a comment from your company to one of your MDF requests. Use it to answer a NEEDS_INFO question from CultureAI (this automatically puts the request back in their queue as SUBMITTED) or to give an update. Adds a permanent entry to the request's timeline and notifies CultureAI's partner team by email. Ids come from list_mdf_requests. Confirm with the user before calling.
submit_mdf_claimwrites
Submit the claim and ROI report for one of your company's APPROVED MDF requests after the activity has happened: leads generated, pipeline value created and what happened. Moves the request to CLAIM_SUBMITTED (awaiting payment) and notifies CultureAI's partner team by email; it cannot be resubmitted. Proof files (invoices, photos) must be uploaded on the request page in the portal first. Ids come from list_mdf_requests. Confirm with the user before calling.
my_rewards
Your company's rewards: totals by status (earned = inside the hold window, approved = payable, issued, redeemed, void), the reward rules that currently apply to you in plain English (e.g. "£250 gift voucher when a deal you registered closes, 45 days after"), and the ledger entries. Use for "what rewards can we earn" and "what are we owed". Totals and rules always cover everything; status, q, since/until (createdAt), sort, limit and offset filter only `entries`. Voucher details show only to the recipient (individual rewards) or partner admins (company rewards). Read-only.
my_tier
Your company's programme tier: the current tier with its benefits and MDF allowance, the next tier, the 12-month metrics CultureAI measures (closed-won value and count, approved registrations, certified users), progress against each promotion rule (value vs threshold, percent, met) and tier history. Use for "how do we reach the next tier" and "what does our tier give us". Read-only.
list_courses
Published training courses available to the signed-in user, required-for-onboarding first: id, slug, title, summary, state (NOT_STARTED, IN_PROGRESS, PASSED), module progress, estimated minutes, pass mark, best score and certificate code, plus requiredForMdf (must be passed before submit_mdf_request). Courses are taken in the portal (each row has a url); this only lists them. Filter by state, requiredOnly and q (title, summary); page with limit/offset. Rows are in `courses`. For a course's content use get_course. Read-only.
get_course
One course by slug in full: description, each module's title and markdown body, video links, quiz size and the signed-in user's progress (modules completed, whether the quiz is unlocked). Use it to summarise or explain a course or to help the user study; the quiz itself is taken in the portal. Slugs come from list_courses. Read-only.
my_certificates
Certificates the signed-in user has earned from CultureAI training, newest first by default: title, course, issue and expiry dates, whether it has expired, the public share URL and a LinkedIn share link. Use for "am I certified" or when the user wants to share a certificate. Filter by status, q (title, course) and since/until (issuedAt); sort and page with limit/offset. Rows are in `certificates`. Read-only.
list_announcements
Announcements CultureAI has sent to the signed-in user, newest first by default: id, title, sent date, a 240-character preview, call to action and whether the user has opened it. Use for "anything new from CultureAI". Filter by unreadOnly, q (title and body) and since/until (sentAt); sort and page with limit/offset. Rows are in `announcements`. For the full body use get_announcement. Read-only.
get_announcement
One announcement sent to the signed-in user, by id: title, sent date, the full markdown body and the call to action. Ids come from list_announcements. Read-only.
team
The people at your company with portal access: name, email, job title, role (PARTNER_ADMIN can manage the team, MEMBER cannot), functions (sales, marketing, technical, executive, operations), status (INVITED, ACTIVE, DISABLED), last login and when they joined. Use for "who at our company has access" or to find a colleague. Filter by status, role and q (name, email, job title); sort and page with limit/offset. Inviting, disabling and role changes are done in the portal. Rows are in `members`. Read-only.

Something not working? Email partners@culture.ai.