MCP Server Documentation

Connect your AI clients to search and query your Adviserry panels using the Model Context Protocol (MCP).

Quick Setup

To connect your AI client to Adviserry, you need your MCP token:

  1. Log in to Adviserry
  2. Go to Settings and find the MCP Server Access section
  3. Copy your personal MCP token

Your token authenticates requests via the Authorization: Bearer <token> header. Keep it secure.

Choose your AI client and follow the setup instructions:

Claude Desktop Configuration

Add this to your claude_desktop_config.json

{
  "mcpServers": {
    "adviserry": {
      "url": "https://adviserry.com/api/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_MCP_TOKEN"
      }
    }
  }
}

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Windows: %APPDATA%\Claude\claude_desktop_config.json

Restart Claude Desktop after saving changes.

Available Tools

The Adviserry MCP server exposes 13 tools. Your AI client will discover these automatically once connected.

search_newsletters

Search through the user's newsletter knowledge base for relevant content. Use this to find information, quotes, or insights from newsletters the user has subscribed to.

ParameterTypeRequiredDescription
querystringYesThe search query to find relevant newsletter content
panel_namestringNoOptional: Filter by a specific panel name (e.g., 'Marketing', 'Tech')
limitstringNoMaximum number of results to return (default: 5, max: 10)
list_panels

List all the user's topic panels and the newsletters in each panel.

No parameters required.

get_recent_issues

Get the most recent newsletter issues from a specific panel or all panels.

ParameterTypeRequiredDescription
panel_namestringNoOptional: Filter by a specific panel name
daysstringNoNumber of days to look back (default: 7, max: 30)
limitstringNoMaximum number of issues to return (default: 10, max: 20)
get_newsletter_summary

Get a summary of a specific newsletter issue by its ID.

ParameterTypeRequiredDescription
issue_idstringYesThe ID of the newsletter issue to summarize
get_topics

Get the key topics covered across the user's newsletters, optionally filtered by panel or time range.

ParameterTypeRequiredDescription
panel_namestringNoOptional: Filter by a specific panel name
daysstringNoNumber of days to analyze (default: 30, max: 90)
search_context

Search through the user's uploaded documents and URLs for relevant content. Use this to find information from PDFs, Word docs, spreadsheets, presentations, or web pages the user has added as context.

ParameterTypeRequiredDescription
querystringYesThe search query to find relevant uploaded content
panel_namestringNoOptional: Filter by a specific panel name. Global uploads are always included.
limitstringNoMaximum number of results to return (default: 5, max: 10)
get_insights

Get proactive insights generated by the user's topic panels. Insights are AI-generated connections between content from different sources, trends, and action items relevant to what the user is working on.

ParameterTypeRequiredDescription
panel_namestringNoOptional: Filter by a specific panel name
statusstringunread | read | saved | allNoFilter by status: 'unread', 'read', 'saved', or 'all' (default: 'all')
limitstringNoMaximum number of insights to return (default: 10, max: 20)
search_actions

Search the user's drafted actions: the concrete, copy-paste-ready things Adviserry's weekly Action Synthesis proposed they DO, drafted from what their sources published and what they said they are working on. This is different from search_newsletters (raw source content) and get_insights (observations): an action carries a finished deliverable, not a summary. Use it whenever the user asks what they should be doing, refers to something Adviserry suggested, or wants to find a past suggestion by topic ("that action about pricing", "what did it tell me to do about hiring?"). Returns the full draft, so you can hand it straight to them.

ParameterTypeRequiredDescription
querystringYesWhat to look for, in plain language. Searched against each action's title, its 'why now' rationale, and the full draft.
panel_namestringNoOptional: restrict to one panel (see list_panels). Omit to search every panel.
domainstringproject | investment | personal | learningNoOptional: restrict to one life area.
effortstringquick | medium | deepNoOptional: restrict by size. 'quick' is minutes, 'medium' is an hour or so, 'deep' is a real block of work.
statusstringopen | unread | read | saved | dismissed | allNoWhich actions to include: 'open' (default, everything not dismissed), 'unread', 'read', 'saved' (the user marked it shipped), 'dismissed', or 'all'.
daysstringNoOptional: only actions drafted in the last N days (max 365). Omit to search the whole history.
limitstringNoMaximum number of actions to return (default: 5, max: 10)
get_actions

List the user's most recent drafted actions, newest synthesis batch first and highest-priority first within a batch. Use this for "what should I be working on?", "what did Adviserry suggest this week?", or to review a briefing without a specific topic in mind. Returns each action's full draft. To find an older action by topic, use search_actions instead.

ParameterTypeRequiredDescription
panel_namestringNoOptional: restrict to one panel (see list_panels)
statusstringopen | unread | read | saved | dismissed | allNoWhich actions to include: 'open' (default, everything not dismissed), 'unread', 'read', 'saved', 'dismissed', or 'all'.
domainstringproject | investment | personal | learningNoOptional: restrict to one life area.
effortstringquick | medium | deepNoOptional: restrict by size.
daysstringNoOptional: only actions from the last N days (max 365). Omit for the most recent regardless of age.
limitstringNoMaximum number of actions to return (default: 10, max: 20)
get_action

Get one action in full: the complete draft, why it was suggested now, every source it was built from with author and date, and the piece of the user's own context it was matched against. Use this after search_actions or get_actions when the user wants to act on a specific suggestion, or wants to know where it came from before trusting it.

ParameterTypeRequiredDescription
action_idstringYesThe action's id, as returned by search_actions or get_actions.
update_action_status

Mark one of the user's own actions as done, read, dismissed, or back to unread, so the dashboard and future syntheses reflect what actually happened. Only do this when the user has said what they did with the action. Use 'saved' when they have shipped or completed it (that is what the dashboard calls Shipped, and it teaches future syntheses to draft more like it), 'dismissed' when they are not going to do it, 'read' to acknowledge without committing. Every value is reversible.

ParameterTypeRequiredDescription
action_idstringYesThe action's id, as returned by search_actions or get_actions.
statusstringsaved | dismissed | read | unreadYes'saved' = shipped/done, 'dismissed' = not doing it, 'read' = seen, 'unread' = put it back.
get_user_context

Get the user's advisor profile: their role, what they're currently working on, challenges they're facing, goals, and freeform notes. This context is used by panels to generate personalized insights and actions. Call this before and after update_context to confirm changes.

No parameters required.

update_context

Update the user's 'what I'm working on' context profile (the same profile get_user_context returns). Only use this when the user explicitly asks to update their Adviserry context. Call get_user_context first to see the current value, and again afterwards to confirm the change. For current_projects and challenges, separate multiple entries with newlines or semicolons. For goals_detail, write one goal per line as 'Goal name: what winning looks like'. The update counts as a fresh human review of the profile. IMPORTANT — this profile usually spans MORE THAN ONE project. The user may run several products and point different panels at each, so the context you can see from wherever you are running is probably only part of it. Because of that: 1. Prefer mode 'append'. Only use 'replace_field' when the user has actually asked to clean the field out. 2. Any update that would remove something returns a PREVIEW and saves nothing. Read the preview to the user, go through the removal list with them item by item, and only then call again with the returned 'confirm' token. Never invent a token, and never confirm on the user's behalf without showing them what disappears. 3. If the user's request is really about one project, pass 'panels' with that project's panel names. Entries tagged to other panels are then protected from removal automatically.

ParameterTypeRequiredDescription
modestringappend | replace_fieldYes'append' adds to the field, keeping what is already there (preferred, and never destructive). 'replace_field' overwrites the field, which will drop anything not in your text — it triggers a confirmation preview first.
fieldstringrole | current_projects | challenges | goals_detail | freeformYesWhich part of the profile to update: role (one sentence on who the person is; replace_field only), current_projects (projects and initiatives), challenges (current struggles), goals_detail (what winning looks like), or freeform (anything else, in the user's own words). Interests are deliberately not writable here — the user manages those on the Context tab.
textstringYesThe content to write. Maximum 2000 characters per update (role: 500).
panelsstringNoOptional, current_projects and challenges only: comma-separated panel names to tag these entries to (see list_panels). Tagged entries only inform actions for those panels; untagged entries can inform any panel. Passing this also protects entries belonging to other panels from being removed. Unknown names fail the update.
confirmstringNoThe token returned by a previous preview of this exact update. Required to apply anything that removes existing context. Send the same field, mode and text you previewed — changing the text invalidates the token and produces a new preview.
on_removalstringarchive | deleteNoWhat happens to removed items once confirmed. 'archive' (default) keeps them restorable on the Context tab. 'delete' is permanent — only use it when the user explicitly says to delete.

Example Prompts

Once connected, you can ask your AI client questions like:

  • "Search my panels for recent advice on fundraising"
  • "What are the latest newsletters about AI from my Tech panel?"
  • "Summarize this week's issues from all my panels"
  • "What topics have my newsletters been covering lately?"
  • "Search my uploaded documents for competitive analysis"
  • "Show me unread insights from my Marketing panel"
  • "List all my panels and their sources"

Rate Limits

DetailValue
Requests per hour500
Reset intervalRolling 60-minute window
Over-limit responseHTTP 429 with error message

Troubleshooting

Connection Failed

  1. Verify your MCP token is correct (copy it fresh from Settings)
  2. Make sure the endpoint URL is https://adviserry.com/api/mcp with no www. prefix. The www host returns a 308 redirect that most MCP clients will not follow, which surfaces as a connection timeout.
  3. Ensure the Authorization header is formatted as Bearer YOUR_TOKEN
  4. Restart your AI client after making config changes

Rate Limit Exceeded

Wait for the current hour to expire. Your limit resets automatically every hour on the hour.

Empty Results

  1. Verify you have newsletters or YouTube channels added to your panels
  2. Check that your Gmail account is connected and synced
  3. Try broadening your search query

Token Not Working

If you recently regenerated your token, make sure to update your AI client config with the new token. The old token is immediately invalidated.

Security Best Practices

  • Never commit your MCP token to version control or share it publicly
  • Regenerate your tokenimmediately if you suspect it has been compromised (Settings → MCP Server Access → Regenerate Token)
  • Always use header-based authentication to prevent token exposure in URLs, logs, or browser history
  • Keep your AI client updated for the latest security patches

Need help? Contact support