Odel
Notra

Notra

@usenotra3TypeScriptMITUpdated 1w ago

Access the Notra API for posts, brand identities, integrations, schedules, and GEO.

View on GitHub
Server endpointStreamable HTTPOAuthProbed

This is the third-party server itself — Odel doesn't run it. Hitting this URL directly talks straight to the upstream server with no auth or proxying. Connect through Odel to front it with managed auth.

Notra MCP Server

An MCP (Model Context Protocol) server for the Notra API. It manages posts, brand identities, integrations, schedules, GEO visibility scans, competitors, content briefs, and AI traffic analytics.

Setup

You can generate an API key from your Notra workspace dashboard under Developer > API Keys.

Node.js 20 or newer is required.

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "notra": {
      "command": "npx",
      "args": ["-y", "@usenotra/mcp"],
      "env": {
        "NOTRA_API_KEY": "your-api-key"
      }
    }
  }
}

Claude Code

claude mcp add notra -- npx -y @usenotra/mcp

Then set the NOTRA_API_KEY environment variable in your shell before launching Claude Code.

Codex

export NOTRA_API_KEY=your-api-key
codex mcp add notra --env NOTRA_API_KEY="$NOTRA_API_KEY" -- npx -y @usenotra/mcp

Run codex mcp list to verify the connection. The Codex CLI, desktop app, and IDE extension share this MCP configuration.

OpenCode

Set NOTRA_API_KEY in your shell, then add the server to your project-level opencode.json or the global ~/.config/opencode/opencode.json:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "notra": {
      "type": "local",
      "command": ["npx", "-y", "@usenotra/mcp"],
      "enabled": true,
      "environment": {
        "NOTRA_API_KEY": "{env:NOTRA_API_KEY}"
      }
    }
  }
}

Amp

Run amp config edit and add the following to your settings, or place it in .amp/settings.json for a workspace-specific configuration:

{
  "amp.mcpServers": {
    "notra": {
      "command": "npx",
      "args": ["-y", "@usenotra/mcp"],
      "env": {
        "NOTRA_API_KEY": "${NOTRA_API_KEY}"
      }
    }
  }
}

Set NOTRA_API_KEY in the environment before launching Amp. Workspace MCP servers may require approval with amp mcp approve notra.

Remote MCP (OAuth)

The hosted streamable HTTP server at https://mcp.usenotra.com/mcp uses OAuth as the primary authentication method. It supports the current 2026-07-28 MCP protocol as well as legacy 2025 clients. MCP clients should discover protected resource metadata at:

https://mcp.usenotra.com/.well-known/oauth-protected-resource

That metadata points to the Notra authorization server (WorkOS AuthKit) at https://auth.usenotra.com, which supports dynamic client registration (RFC 7591). The MCP server also mirrors the authorization server metadata at https://mcp.usenotra.com/.well-known/oauth-authorization-server.

API key alternative

Remote connections also accept a Notra API key as a static Authorization: Bearer … header. Generate one from your Notra workspace dashboard under Developer > API Keys. OAuth-capable clients should prefer the OAuth flow instead of manual key configuration.

For self-hosted HTTP deployments, OAuth validation can be configured with:

WORKOS_AUTHKIT_DOMAIN=auth.usenotra.com
WORKOS_CLIENT_ID=client_xxx
NOTRA_MCP_RESOURCE=https://mcp.usenotra.com

The issuer is https://{WORKOS_AUTHKIT_DOMAIN} and must match the iss claim in tokens minted by AuthKit; a mismatch causes every bearer token to be rejected. Token signatures are verified against https://{WORKOS_AUTHKIT_DOMAIN}/oauth2/jwks.

When NODE_ENV=development, the default AuthKit domain is divine-dress-62-development.authkit.app; production defaults to auth.usenotra.com.

Tools

Posts

ToolDescription
list_postsList posts with optional filters for sorting, pagination, status, content type, and brand identity
get_postGet a single post by ID
update_postUpdate a post's title, markdown, or status
delete_postDelete a post
generate_postQueue async post generation from GitHub activity
get_post_generation_statusCheck the status of a post generation job

Brand Identities

ToolDescription
list_brand_identitiesList all brand identities
get_brand_identityGet a single brand identity by ID
update_brand_identityUpdate brand identity settings
delete_brand_identityDelete a brand identity
generate_brand_identityQueue async brand identity generation from a website URL
get_brand_identity_generation_statusCheck the status of a brand identity generation job

Integrations

ToolDescription
list_integrationsList all connected integrations (GitHub, Slack, Linear)
create_github_integrationConnect a GitHub repository
delete_integrationDelete a GitHub or Linear integration

Schedules

ToolDescription
list_schedulesList scheduled content generation jobs
create_scheduleCreate a scheduled content generation job
update_scheduleUpdate a scheduled content generation job
delete_scheduleDelete a scheduled content generation job

Chats

ToolDescription
list_chatsList chat sessions
get_chatGet a single chat with messages
get_chat_by_external_channelGet a chat by Discord or Slack channel ID
create_chatStart a new chat and return the streamed reply
post_chat_messagePost a message to an existing chat and return the streamed reply

Skills

ToolDescription
list_skillsList reusable writing skills
get_skillGet a single skill by name
create_skillCreate a reusable writing skill
update_skillUpdate a reusable writing skill
delete_skillDelete a reusable writing skill

Projects

GEO features are scoped to a project. Most GEO tools take a projectId; call list_projects first to find it. GEO tools require an organization-scoped API key and the GEO plan.

ToolDescription
list_projectsList the organization's GEO projects
get_projectGet a single project by ID
create_projectCreate a project, optionally linked to a brand
update_projectRename a project or relink its brand identity
delete_projectDelete a project and all of its GEO data (cascading)

GEO settings

ToolDescription
get_geo_settingsGet tracked company, aliases, languages, engines and scan config
update_geo_settingsReplace the settings document and restart the scan cycle

GEO prompts and sequences

ToolDescription
list_geo_promptsList tracked prompts (custom and auto-derived)
create_geo_promptTrack a new prompt
update_geo_promptEnable or disable a tracked prompt
delete_geo_promptStop tracking a prompt
import_geo_promptsBulk import prompts from rows or CSV
list_geo_sequencesList multi-turn prompt sequences
create_geo_sequenceCreate a prompt sequence
update_geo_sequenceUpdate a sequence's name, steps or enabled state
delete_geo_sequenceDelete a sequence
run_geo_sequenceRun a sequence now, synchronously (uses AI credits, can take minutes)

GEO competitors

ToolDescription
list_geo_competitorsList tracked competitors
upsert_geo_competitorCreate, update or rename a competitor
suggest_geo_competitorsAI-discover likely competitors for a domain
delete_geo_competitorStop tracking a competitor
import_geo_competitorsBulk import competitors from rows or CSV

GEO scans and visibility

ToolDescription
create_geo_scanTrigger an async visibility scan (uses AI credits)
list_geo_scansList scans with pagination
get_geo_scanGet a scan and its status
get_geo_visibility_overviewMention rates per answer engine
get_geo_visibility_timeseriesDaily mention counts per engine
get_geo_prompt_resultsLatest stored answer per prompt and engine, with sources
get_geo_competitor_shareShare of voice across tracked brands
get_geo_language_shareMention rates per tracked language
get_geo_competitor_detailOne competitor's mention history and the prompts driving it

GEO content briefs

ToolDescription
list_geo_content_gapsPrompts where competitors are mentioned and this brand is not
list_geo_content_briefsList content briefs and their statuses
plan_geo_content_briefResearch a topic and plan a brief (billed, can take minutes)
get_geo_content_briefGet a brief with the full document and writer status
approve_geo_content_briefApprove a brief and start the article writer

Agent readiness

ToolDescription
get_geo_agent_readinessLatest readiness report, score history and any scan in flight
start_geo_agent_readiness_scanQueue a readiness scan of the project's website

AI traffic

ToolDescription
get_geo_traffic_overviewCrawler and AI-referral totals, sources and daily timeseries
get_geo_traffic_logMost recent individual AI crawler/referral requests
list_geo_traffic_journeysSessions grouped by journey
get_geo_traffic_journeyEvery event in one journey
list_geo_traffic_pagesMost visited pages by AI traffic
get_geo_ingest_setupTracking install snippets and ingest endpoint
issue_geo_ingest_tokenIssue the tracking token
rotate_geo_ingest_tokenRotate the token, invalidating all previously issued tokens

Feedback

ToolDescription
submit_feedbackSend a bug report, feature request, question or praise to the Notra inbox (no auth)