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:
- Log in to Adviserry
- Go to Settings and find the MCP Server Access section
- 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_newslettersSearch 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | Yes | The search query to find relevant newsletter content |
panel_name | string | No | Optional: Filter by a specific panel name (e.g., 'Marketing', 'Tech') |
limit | string | No | Maximum number of results to return (default: 5, max: 10) |
list_panelsList all the user's topic panels and the newsletters in each panel.
No parameters required.
get_recent_issuesGet the most recent newsletter issues from a specific panel or all panels.
| Parameter | Type | Required | Description |
|---|---|---|---|
panel_name | string | No | Optional: Filter by a specific panel name |
days | string | No | Number of days to look back (default: 7, max: 30) |
limit | string | No | Maximum number of issues to return (default: 10, max: 20) |
get_newsletter_summaryGet a summary of a specific newsletter issue by its ID.
| Parameter | Type | Required | Description |
|---|---|---|---|
issue_id | string | Yes | The ID of the newsletter issue to summarize |
get_topicsGet the key topics covered across the user's newsletters, optionally filtered by panel or time range.
| Parameter | Type | Required | Description |
|---|---|---|---|
panel_name | string | No | Optional: Filter by a specific panel name |
days | string | No | Number of days to analyze (default: 30, max: 90) |
search_contextSearch 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | Yes | The search query to find relevant uploaded content |
panel_name | string | No | Optional: Filter by a specific panel name. Global uploads are always included. |
limit | string | No | Maximum number of results to return (default: 5, max: 10) |
get_insightsGet 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
panel_name | string | No | Optional: Filter by a specific panel name |
status | stringunread | read | saved | all | No | Filter by status: 'unread', 'read', 'saved', or 'all' (default: 'all') |
limit | string | No | Maximum number of insights to return (default: 10, max: 20) |
search_actionsSearch 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | Yes | What to look for, in plain language. Searched against each action's title, its 'why now' rationale, and the full draft. |
panel_name | string | No | Optional: restrict to one panel (see list_panels). Omit to search every panel. |
domain | stringproject | investment | personal | learning | No | Optional: restrict to one life area. |
effort | stringquick | medium | deep | No | Optional: restrict by size. 'quick' is minutes, 'medium' is an hour or so, 'deep' is a real block of work. |
status | stringopen | unread | read | saved | dismissed | all | No | Which actions to include: 'open' (default, everything not dismissed), 'unread', 'read', 'saved' (the user marked it shipped), 'dismissed', or 'all'. |
days | string | No | Optional: only actions drafted in the last N days (max 365). Omit to search the whole history. |
limit | string | No | Maximum number of actions to return (default: 5, max: 10) |
get_actionsList 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
panel_name | string | No | Optional: restrict to one panel (see list_panels) |
status | stringopen | unread | read | saved | dismissed | all | No | Which actions to include: 'open' (default, everything not dismissed), 'unread', 'read', 'saved', 'dismissed', or 'all'. |
domain | stringproject | investment | personal | learning | No | Optional: restrict to one life area. |
effort | stringquick | medium | deep | No | Optional: restrict by size. |
days | string | No | Optional: only actions from the last N days (max 365). Omit for the most recent regardless of age. |
limit | string | No | Maximum number of actions to return (default: 10, max: 20) |
get_actionGet 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
action_id | string | Yes | The action's id, as returned by search_actions or get_actions. |
update_action_statusMark 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
action_id | string | Yes | The action's id, as returned by search_actions or get_actions. |
status | stringsaved | dismissed | read | unread | Yes | 'saved' = shipped/done, 'dismissed' = not doing it, 'read' = seen, 'unread' = put it back. |
get_user_contextGet 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_contextUpdate 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
mode | stringappend | replace_field | Yes | '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. |
field | stringrole | current_projects | challenges | goals_detail | freeform | Yes | Which 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. |
text | string | Yes | The content to write. Maximum 2000 characters per update (role: 500). |
panels | string | No | Optional, 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. |
confirm | string | No | The 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_removal | stringarchive | delete | No | What 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
| Detail | Value |
|---|---|
| Requests per hour | 500 |
| Reset interval | Rolling 60-minute window |
| Over-limit response | HTTP 429 with error message |
Troubleshooting
Connection Failed
- Verify your MCP token is correct (copy it fresh from Settings)
- Make sure the endpoint URL is
https://adviserry.com/api/mcpwith nowww.prefix. The www host returns a 308 redirect that most MCP clients will not follow, which surfaces as a connection timeout. - Ensure the Authorization header is formatted as
Bearer YOUR_TOKEN - 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
- Verify you have newsletters or YouTube channels added to your panels
- Check that your Gmail account is connected and synced
- 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