# Notra, for your agent

102 tools over MCP. Your agent drafts changelogs, launch posts and social updates from the editor it already lives in.

MCP server URL: https://mcp.usenotra.com/mcp

## Connect from any client

### Claude Code

```bash
claude mcp add --transport http notra https://mcp.usenotra.com/mcp
```

### Codex

```bash
codex mcp add notra -- npx -y mcp-remote https://mcp.usenotra.com/mcp
```

### Cursor

```bash
npx add-mcp https://mcp.usenotra.com/mcp
```

### Hermes

```bash
hermes mcp add notra --url https://mcp.usenotra.com/mcp
```

### OpenClaw

```bash
mcporter config add notra https://mcp.usenotra.com/mcp
```

### Other

```bash
npx add-mcp https://mcp.usenotra.com/mcp
```


## Example session

Prompt: "draft a changelog from this week's merged PRs and post it"

- notra - list_events (MCP) (range: "week"): 14 merged PRs, 2 releases
- notra - create_post (MCP) (type: "changelog"): "Scheduler v2, 40% faster builds"
- notra - publish_post (MCP) (type: "changelog"): live at acme.com/changelog

Published. Drafted in your voice from **14** PRs and live at `acme.com/changelog`.

## What your agent can do

- `list_posts`: List post summaries from Notra (title, status, type, short excerpt) with optional filters for sorting, pagination, status, content type, and brand identity. Use get_post for full content.
- `get_post`: Get a single post by its ID, including full content in HTML and markdown
- `create_post`: Create a post directly from your own title and markdown, without AI generation. Omit markdown to create an empty draft to fill in later with update_post. Slugs are only accepted for blog posts and changelogs. Setting status to published can expose the post on a hosted site and request a visibility rescan.
- `update_post`: Update a post's title, slug, markdown, or publication status. Changes to title, slug, or markdown also sync a post linked to GitHub: an open pull request gets a new commit, and a repository set to publish directly gets a direct commit when its live branch allows one. Otherwise, including closed or merged pull requests, GitHub is left as is and no new pull request is opened. Publishing can expose content on a hosted site and request a visibility rescan. A sync failure can occur after the post is saved; check the post and linked PR before retrying.
- `delete_post`: Delete a post by its ID, including content that may be published on a hosted site.
- `generate_post`: Queue an async post generation job. Notra will analyze your GitHub activity and generate content. Use get_post_generation_status to poll for completion.
- `get_post_generation_status`: Check the status of an async post generation job. Returns job status and event log.
- `get_post_schedule`: Get a post's publishing schedule and the state of every destination. Returns a null schedule when nothing is scheduled.
- `schedule_post`: Schedule an existing post for publishing in Notra and optionally GitHub, X, or LinkedIn. Replaces a schedule that has not started; later post edits are included when publishing runs, within about a minute of scheduledAt.
- `cancel_post_schedule`: Cancel pending publishing destinations and clear failed ones. Already-publishing destinations cannot be interrupted; inProgress reports whether any are still running.
- `list_brand_identities`: List all brand identities configured for your organization
- `get_brand_identity`: Get a single brand identity by its ID, including tone, audience, and language settings
- `update_brand_identity`: Update a brand identity's settings including name, tone, audience, language, and more
- `delete_brand_identity`: Delete a brand identity. Returns any schedules or events that were disabled as a result.
- `generate_brand_identity`: Queue async brand identity generation from a website URL. Notra will scrape the site and extract brand info. Use get_brand_identity_generation_status to poll for completion.
- `get_brand_identity_generation_status`: Check the status of an async brand identity generation job
- `list_brand_colors`: List the brand guideline colors of a brand identity, including light/dark hex values, role, and usage
- `create_brand_color`: Add a color to a brand identity's guidelines
- `update_brand_color`: Update a brand color's hex values, name, role, or usage. Only the provided fields change.
- `delete_brand_color`: Delete a color from a brand identity's guidelines
- `list_integrations`: List enabled GitHub and Linear integrations for your organization. Includes organization details. The slack array is always empty; Slack connections are managed in the Notra dashboard and are not exposed by this API.
- `create_github_integration`: Connect a public GitHub repository for content generation. For private repositories, configure access in the Notra dashboard; never request or send a personal access token in chat.
- `delete_integration`: Delete a GitHub or Linear integration. Returns any schedules or events that were disabled as a result.
- `list_schedules`: List scheduled content generation jobs, optionally filtered by repository IDs
- `create_schedule`: Create a content generation schedule using a cron-style daily, weekly, or monthly trigger. Generation uses AI credits. When autoPublish is true, generated content is automatically published to outputConfig.publishDestination.
- `update_schedule`: Update an existing content generation schedule. When autoPublish is true, future generated content is automatically published to outputConfig.publishDestination.
- `delete_schedule`: Delete a content generation schedule by its ID
- `list_event_triggers`: List event triggers that generate content automatically from GitHub releases or pushes. repositoryMap labels each targeted GitHub integration ID with its owner/repo.
- `get_event_trigger`: Get a single event trigger by its ID
- `create_event_trigger`: Create an event trigger that generates content whenever a GitHub release or push happens in the targeted repositories. Generated content uses AI credits each time the trigger fires. When autoPublish is true, generated content is automatically published to outputConfig.publishDestination.
- `update_event_trigger`: Replace an event trigger's configuration. The API takes the full definition, so read it with get_event_trigger first and send every field back. When autoPublish is true, future generated content is automatically published to outputConfig.publishDestination.
- `delete_event_trigger`: Delete an event trigger
- `list_webhook_endpoints`: List HTTPS endpoints subscribed to Notra events. Signing secrets are not returned.
- `delete_webhook_endpoint`: Remove a webhook subscription and cancel its unsent deliveries
- `list_webhook_deliveries`: List webhook deliveries across all endpoints, newest first. Page with offset while hasMore is true.
- `get_webhook_delivery`: Get a webhook delivery's payload and attempt history
- `retry_webhook_delivery`: Queue a failed webhook delivery to be sent again, keeping its attempt history. This sends data to the subscribed external endpoint again and may repeat downstream effects
- `list_skills`: List reusable writing skills for your organization
- `get_skill`: Get a single reusable writing skill by name
- `create_skill`: Create a reusable writing skill
- `update_skill`: Update a reusable writing skill by name
- `delete_skill`: Delete a reusable writing skill by name
- `list_feedback`: List feedback your organization received through its feedback URL, MCP servers or SDKs, filtered by triage status, kind or project
- `get_feedback`: Get a single feedback entry with its full message, agent metadata and context URL
- `update_feedback`: Set the triage status of a feedback entry: new, triaged, resolved or archived
- `list_projects`: List the organization's GEO projects. Most GEO tools take a projectId; call this first to find it.
- `get_project`: Get a single GEO project by its ID
- `create_project`: Create a new GEO project, optionally linked to a brand identity
- `update_project`: Rename a GEO project or relink its brand identity
- `delete_project`: Delete a GEO project and its settings, prompts, sequences, competitors, scans, checks, and reports. This cannot be undone. The organization's last project cannot be deleted.
- `get_geo_settings`: Get a project's GEO settings: tracked company name, aliases, languages, answer engines and the recurring scan configuration
- `list_geo_engines`: List the answer engine IDs a project can track. Includes model APIs and consumer surfaces such as google/ai-overview (Google AI Overview), google/gemini (the Gemini app) and openai/chatgpt (the ChatGPT app). Use these IDs for engines in update_geo_settings.
- `update_geo_settings`: Replace all GEO settings and restart the recurring scan schedule. Send every field from get_geo_settings; this endpoint does not merge partial updates. Use engine IDs from list_geo_engines and languages listed in the current settings response.
- `list_geo_prompts`: List the GEO prompts tracked for a project: custom prompts plus the ones derived automatically from the brand context
- `create_geo_prompt`: Track a new GEO prompt so future scans check it against every configured answer engine
- `update_geo_prompt`: Enable or disable a tracked GEO prompt
- `delete_geo_prompt`: Stop tracking a GEO prompt
- `import_geo_prompts`: Bulk import GEO prompts from structured rows or raw CSV text. Prompts that already exist are skipped, not duplicated.
- `list_geo_sequences`: List a project's GEO prompt sequences (multi-turn conversations played against answer engines)
- `create_geo_sequence`: Create a GEO prompt sequence: an ordered list of prompts played as one conversation
- `update_geo_sequence`: Update a GEO prompt sequence's name, steps or enabled state
- `delete_geo_sequence`: Delete a GEO prompt sequence
- `run_geo_sequence`: Run a GEO prompt sequence now, synchronously, against every available answer engine. This uses AI credits and the request can take several minutes; the result reports checks, mentions and engines covered.
- `list_geo_competitors`: List the competitors tracked for a project's GEO share-of-voice reporting
- `upsert_geo_competitor`: Create or update a tracked GEO competitor. Matches on name, case-insensitively; send previousName to rename an existing competitor. Returns the full competitor list.
- `suggest_geo_competitors`: Discover likely competitors for a website domain using AI. Results are cached per organization and domain.
- `delete_geo_competitor`: Stop tracking a GEO competitor. The name is matched case-insensitively.
- `import_geo_competitors`: Bulk import GEO competitors from structured rows or raw CSV text. Existing competitors are updated in place rather than duplicated.
- `get_geo_snapshot`: Get a compact GEO diagnosis across visibility, sentiment, scan changes, competitors, content gaps, shelf sources, readiness and AI traffic, with deterministic next actions
- `get_geo_changes`: Compare the two latest GEO scans and list gained or lost mentions, positions and citations
- `get_geo_prompt_history`: Get compact historical checks for one prompt. Use a returned check id with get_geo_prompt_result_detail for the full answer.
- `get_geo_sentiment`: Get aggregate GEO sentiment, engine breakdowns, timeseries and previous-period comparison
- `get_geo_sentiment_analysis`: Get the stored thematic GEO sentiment analysis without starting a billed analysis run
- `list_geo_sentiment_evidence`: List a bounded page of full answers used as sentiment evidence
- `list_geo_shelf_sources`: List cited and manually tracked GEO shelf sources, including placements and opportunity state
- `create_geo_scan`: Trigger a GEO visibility scan. The scan runs asynchronously and checks every enabled prompt against every configured answer engine; poll get_geo_scan with the returned scanId for status, progress, mentions, and safe failure details. This uses AI credits.
- `list_geo_scans`: List a project's GEO scans, newest first, with pagination, check totals by engine, and safe failure details
- `get_geo_scan`: Get a GEO scan's status, planned and completed checks, mentions and explicit failures by engine, plus safe failure details when the scan failed
- `get_geo_visibility_overview`: Get GEO mention rates per answer engine: checks, mentions and average position for every engine the project tracks
- `get_geo_visibility_timeseries`: Get daily GEO mention counts per answer engine, one point per day and engine
- `list_geo_prompt_result_summaries`: List filtered, paginated GEO prompt results without full answer text or sources. Use checkId with get_geo_prompt_result_detail.
- `get_geo_prompt_result_detail`: Get the full answer, grounding sources and token metadata for one GEO check
- `get_geo_competitor_share`: Get GEO share of voice: the top brands by mentions with their share of all mentions, plus a summary of the remaining brands. Filter with brands, cap with limit, and set includeTrends for daily trends of the returned brands.
- `get_geo_language_share`: Get GEO mention rates broken down by tracked language
- `get_geo_competitor_detail`: Get one competitor's GEO mention history: daily mentions and the prompts that produced them. Use the brand names reported by get_geo_competitor_share.
- `list_geo_content_gaps`: List GEO content gaps: prompts where competitors are mentioned but this brand is not, plus Search Console queries with no tracked prompt. Each gap links to the brief already written for it, when there is one.
- `list_geo_content_briefs`: List a project's GEO content briefs and their statuses. A brief is the outline of a GEO post; match a post to its brief by postId.
- `plan_geo_content_brief`: Research a topic and plan a GEO content brief, saved as a draft. This books AI credits, is billed, and can take a few minutes. Set autoApprove to start the article writer in the same call.
- `get_geo_content_brief`: Get a single GEO content brief: the post's outline (sections, FAQ, internal links, checklist), writer status and the resulting post ID. Use get_post for the article itself.
- `update_geo_content_brief`: Edit a GEO content brief, the outline of a GEO post. Omitted fields keep their value; list fields replace the whole list, so send the full outline when changing sections. Only briefs in draft or failed status can be edited, and the draft post's plan is updated with them. Editing drops research notes such as the baseline and recommended angle. To change a finished article, use update_post.
- `approve_geo_content_brief`: Approve a GEO content brief and start the article writer. Only briefs in draft or failed status can be approved. Poll get_geo_content_brief for writer progress; the finished article appears as a post.
- `get_geo_agent_readiness`: Get the latest agent readiness report for the project's website: score, failed/partial checks with recommendations, any scan still in flight, and the score history. Never starts a scan.
- `start_geo_agent_readiness_scan`: Queue an agent readiness scan of the project's website. A scan already running against the same URL is reused (alreadyRunning is true). Poll get_geo_agent_readiness for the result. Requires the agent readiness feature for the organization.
- `get_geo_traffic_overview`: Get AI traffic totals for a project's website: crawler and AI-referral visit totals, a per-source breakdown and the daily timeseries behind it
- `get_geo_traffic_log`: Get the most recent individual requests from AI crawlers and referrals. This endpoint has no time window; use limit to bound it.
- `list_geo_traffic_journeys`: List AI traffic journeys: sessions grouped by agent, showing how many pages one agent read, over what span, with sample paths
- `get_geo_traffic_journey`: Get every event in one AI traffic journey
- `list_geo_traffic_pages`: List the pages AI crawlers and referrals read most, with the previous window's count for comparison
- `get_geo_ingest_setup`: Get the AI traffic tracking install snippets (Next.js, Nuxt, Netlify) and the ingest endpoint. The snippets read the token from an environment variable; manage tracking credentials in the Notra dashboard.
- `whoami`: Show the current Notra workspace and authenticated account. Use this to confirm which workspace this MCP connection operates against.
- `list_workspaces`: List accepted and pending Notra workspaces available to the authenticated account. Organization API keys only return their current workspace. Account API keys return every workspace their user belongs to; the user picks the one other tools act on with NOTRA_ORGANIZATION_ID (stdio), or the /mcp/<workspace> URL or X-Notra-Organization-Id header (HTTP).
- `submit_feedback`: Send feedback to the Notra team. Only call this when the user explicitly asks to send feedback, and only include content the user wants shared. Do not call it proactively after errors or unsupported requests.

## Not sure what to ask your agent?

13 copy-paste workflows for visibility tracking, content and reporting, each with the exact prompt and the integrations it uses.

[Browse use cases](https://www.usenotra.com/mcp/use-cases.md?ntr=4VXTH6CKhCxf2DNC)
