# Notra

```json
{
  "name": "Notra",
  "slug": "notra",
  "url": "https://composio.dev/toolkits/notra",
  "markdown_url": "https://composio.dev/toolkits/notra.md",
  "logo_url": "https://logos.composio.dev/api/notra",
  "categories": [
    "ai & machine learning"
  ],
  "is_composio_managed": false,
  "updated_at": "2026-10-19T05:33:57.378Z"
}
```

![Notra logo](https://logos.composio.dev/api/notra)

## Description

Securely connect your AI agents and chatbots (Claude, ChatGPT, Cursor, etc) with Notra MCP or direct API to create content, manage AI agents, run feedback workflows, and organize generative engine optimization data through natural language.

## Summary

Notra is a platform for creating content, AI agents, feedback workflows, and GEO data.
It brings these workflows together so teams can manage and improve AI-driven content operations.

## Categories

- ai & machine learning

## Toolkit Details

- Tools: 110

## Images

- Logo: https://logos.composio.dev/api/notra

## Authentication

- **Api Key**
  - Type: `api_key`
  - Description: Api Key authentication for Notra.
  - Setup:
    - Configure Api Key credentials for Notra.
    - Use the credentials when creating an auth config in Composio.

## Suggested Prompts

- Create content about AI agent feedback workflows
- Review Notra content for GEO improvement opportunities
- Build an AI agent for feedback collection

## Supported Tools

| Tool slug | Name | Description |
|---|---|---|
| `NOTRA_APPROVE_GEO_CONTENT_BRIEF` | Approve GEO Content Brief | Irreversibly approve a draft or failed brief and queue the paid Notra writer. This claims the brief and books writer work. |
| `NOTRA_CANCEL_POST_SCHEDULE` | Cancel Post Schedule | Destructively cancel every post destination that has not started and clear failed destinations. A destination already publishing cannot be interrupted; it finishes and is not retried, and in_progress reports this case. |
| `NOTRA_CREATE_AGENT_SESSION` | Create Agent Session | Starts a durable paid AI agent session with an initial user message and returns its session ID. Read subsequent output from the session event stream. This can consume credits and produce unbounded streamed model output; do not retry blindly after an ambiguous failure. |
| `NOTRA_CREATE_CHAT` | Create Chat | Create a paid Notra chat, persist the first message, and wait for the full assistant stream. The response is newline-delimited stream text rather than parsed message parts and may run for an unbounded model/tool duration. Limited with chat messages to 30 requests per minute per organization; retrying creates another chat and may repeat tool side effects. |
| `NOTRA_CREATE_EVENT_TRIGGER` | Create Event Trigger | Creates a persistent GitHub event automation that generates the selected content type for matching releases or pushes and can publish the result automatically. This is a paid operation. |
| `NOTRA_CREATE_GEO_PROJECT` | Create GEO Project | Create a persistent GEO project linked to a brand identity. Requires an active paid plan or positive AI credit balance and a GEO plan. |
| `NOTRA_CREATE_GEO_PROMPT` | Create GEO Prompt | Persist a custom prompt for future GEO scans. Requires paid access and an active GEO plan. |
| `NOTRA_CREATE_GEO_SCAN` | Create GEO Scan | Irreversibly queue a paid GEO scan that records checks against configured answer engines. The scan record is created before hand-off; poll the returned status URL. Requires sufficient plan or AI credits, rejects concurrent scans with 409, and is limited to 4 requests per hour per organization. |
| `NOTRA_CREATE_GEO_SEQUENCE` | Create GEO Sequence | Persist a one-to-five-turn GEO prompt sequence for tracked runs. Requires paid GEO access. |
| `NOTRA_CREATE_GITHUB_INTEGRATION` | Create GitHub Integration | Connect a GitHub repository to Notra, enabling changelog generation and creating a webhook secret. This paid operation stores a supplied personal access token for private repositories; never pass a token unless required. Limited to 20 requests per minute per API key. |
| `NOTRA_CREATE_POST` | Create Post | Create a draft or published Notra post directly from supplied content without invoking AI generation. |
| `NOTRA_CREATE_SCHEDULE` | Create Schedule | Creates a recurring schedule that generates one content type from the selected GitHub integrations. Times are in UTC. A schedule with the same source, targets, output, and lookback settings as an existing one is rejected with 409. This paid operation creates a persistent recurring automation that may generate and auto-publish content on future runs; review enabled and auto_publish before calling. |
| `NOTRA_CREATE_SKILL` | Create Skill | Creates a custom skill. Names must be unique within the organization. This paid operation creates a persistent agent skill. |
| `NOTRA_CREATE_WEBHOOK` | Create Webhook | Create a paid outbound webhook subscription that causes persistent external deliveries. The signing secret is returned only once and must be stored securely. |
| `NOTRA_DELETE_BRAND_IDENTITY` | Delete Brand Identity | Permanently delete a non-default brand identity and disable every schedule or event trigger that references it. The default identity cannot be deleted. |
| `NOTRA_DELETE_EVENT_TRIGGER` | Delete Event Trigger | Delete an event trigger. Permanently delete an event trigger and stop future matching events from running it. |
| `NOTRA_DELETE_GEO_COMPETITOR` | Delete GEO Competitor | Permanently stop tracking a competitor and return the remaining competitor list. |
| `NOTRA_DELETE_GEO_PROJECT` | Delete GEO Project | Permanently delete a GEO project and cascade-delete its settings, prompts, sequences, competitors, scans, checks, and reports, while cancelling pending scans. Feedback is detached, not deleted. The last project or a project with hosted Sites cannot be deleted. |
| `NOTRA_DELETE_GEO_PROMPT` | Delete GEO Prompt | Permanently stop tracking a GEO prompt. This destructive change removes it from future scans and requires an active GEO plan. |
| `NOTRA_DELETE_GEO_SEQUENCE` | Delete GEO Sequence | Permanently delete a tracked GEO prompt sequence so it can no longer be run. |
| `NOTRA_DELETE_INTEGRATION` | Delete Integration | Permanently delete a Notra GitHub or Linear integration and disable every schedule or event trigger that targets it. |
| `NOTRA_DELETE_POST` | Delete Post | Permanently delete one Notra post by ID. Use only when the post is no longer needed; this operation cannot be undone. |
| `NOTRA_DELETE_SCHEDULE` | Delete Schedule | Deletes the schedule and stops future runs. Posts generated by earlier runs are kept. Permanently delete a schedule and stop future runs; posts from previous runs remain. |
| `NOTRA_DELETE_SKILL` | Delete Skill | Deletes a custom skill. System skills cannot be deleted. Permanently delete an agent skill. |
| `NOTRA_DELETE_WEBHOOK` | Delete Webhook | Permanently remove a Notra webhook subscription and cancel all deliveries that have not yet been sent. |
| `NOTRA_GENERATE_BRAND_IDENTITY` | Generate Brand Identity | Create a brand identity immediately and queue a paid, irreversible website-analysis job that fills its company, tone, and audience fields. Poll NOTRA_GET_BRAND_IDENTITY_GENERATION; limited to 5 requests per minute per API key. |
| `NOTRA_GENERATE_POST` | Generate Post | Queue a paid, irreversible AI post-generation job. The call consumes plan capacity or credits even if later generation fails. Poll NOTRA_GET_POST_GENERATION until terminal; limited to 10 requests per minute per API key. |
| `NOTRA_GET_BRAND_IDENTITY` | Get Brand Identity | Get one Notra brand identity by ID. A missing identity is represented by a successful response with brand_identity set to null. |
| `NOTRA_GET_BRAND_IDENTITY_GENERATION` | Get Brand Identity Generation | Get a brand identity analysis job. Poll until status is completed or failed, then fetch job.brand_identity_id with NOTRA_GET_BRAND_IDENTITY. |
| `NOTRA_GET_CHAT` | Get Chat | Get one Notra chat and its complete message history by chat ID. |
| `NOTRA_GET_CHAT_BY_EXTERNAL_CHANNEL` | Get Chat By External Channel | Find the Notra chat linked to a Discord or Slack channel ID. |
| `NOTRA_GET_EVENT_TRIGGER` | Get Event Trigger | Returns one GitHub event trigger with its event filters, monitored repositories, generated content type, and publishing settings. |
| `NOTRA_GET_FEEDBACK` | Get Feedback | Returns one feedback entry with its classification, triage status, submission context, and timestamps. |
| `NOTRA_GET_GEO_AGENT_READINESS` | Get GEO Agent Readiness | Get the latest stored agent-readiness report, any newer run state, score history, and comparison for a GEO project's website without starting a scan. |
| `NOTRA_GET_GEO_COMPETITOR_SHARE` | Get GEO Competitor Share | Read paid-plan competitor share-of-voice metrics without starting a scan. |
| `NOTRA_GET_GEO_COMPETITOR_VISIBILITY` | Get GEO Competitor Visibility | Read one competitor's paid-plan mention history without starting a scan. |
| `NOTRA_GET_GEO_CONTENT_BRIEF` | Get GEO Content Brief | Read one stored paid-plan GEO content brief without approving or starting writer work. |
| `NOTRA_GET_GEO_INGEST_SETUP` | Get GEO Ingest Setup | Read paid-plan traffic installation snippets and endpoints. This does not issue or rotate credentials, but deploying the returned setup changes external traffic collection. |
| `NOTRA_GET_GEO_LANGUAGE_SHARE` | Get GEO Language Share | Read paid-plan GEO visibility by language without starting a scan. |
| `NOTRA_GET_GEO_PROJECT` | Get GEO Project | Get one GEO project. All GEO endpoints require an active GEO plan. |
| `NOTRA_GET_GEO_PROMPT_HISTORY` | Get GEO Prompt History | Read stored paid-plan checks for a tracked prompt without starting a scan. |
| `NOTRA_GET_GEO_PROMPT_RESULT_DETAIL` | Get GEO Prompt Result Detail | Read one stored paid-plan prompt result without starting a scan. |
| `NOTRA_GET_GEO_PROMPT_RESULTS` | Get GEO Prompt Results | Read stored paid-plan prompt answers and grounding data without starting or billing a scan. |
| `NOTRA_GET_GEO_SCAN` | Get GEO Scan | Get one GEO scan's status, progress and mentions by engine, including safe failure metadata. Legacy scans may have null planned totals. Requires an active GEO plan. |
| `NOTRA_GET_GEO_SENTIMENT` | Get GEO Sentiment | Read current and previous paid-plan GEO sentiment metrics without starting billed analysis. |
| `NOTRA_GET_GEO_SENTIMENT_ANALYSIS` | Get GEO Sentiment Analysis | Read cached paid-plan thematic sentiment analysis. This never starts or bills a model run. |
| `NOTRA_GET_GEO_SETTINGS` | Get GEO Settings | Get the complete GEO configuration and current scan state for a project. Requires an active GEO plan. |
| `NOTRA_GET_GEO_TRAFFIC_JOURNEY` | Get GEO Traffic Journey | Read the paid-plan events in one AI traffic journey without changing tracking setup. |
| `NOTRA_GET_GEO_TRAFFIC_LOG` | Get GEO Traffic Log | Read a bounded set of recent paid-plan AI traffic events without changing tracking setup. |
| `NOTRA_GET_GEO_TRAFFIC_OVERVIEW` | Get GEO Traffic Overview | Get AI crawler, citation, referral, and conversion traffic totals, source breakdowns, and daily points for a GEO project. |
| `NOTRA_GET_GEO_VISIBILITY_OVERVIEW` | Get GEO Visibility Overview | Get mention rates, checks, citations, visibility, and average positions by answer engine for a GEO project and date window. |
| `NOTRA_GET_GEO_VISIBILITY_TIMESERIES` | Get GEO Visibility Timeseries | Read paid-plan daily GEO visibility metrics. This does not start a scan or bill an analysis job. |
| `NOTRA_GET_POST` | Get Post | Get one Notra post by ID, including its rendered content, markdown source, metadata, and publication status. A missing post is returned as post=null. |
| `NOTRA_GET_POST_GENERATION` | Get Post Generation | Get a post generation job and event log. Poll until status is completed, failed, or skipped; when completed, fetch job.post_id with NOTRA_GET_POST. |
| `NOTRA_GET_POST_SCHEDULE` | Get Post Schedule | Get a post's current publishing schedule and the state of every destination, or null when no schedule exists. |
| `NOTRA_GET_PUBLIC_API_STATUS` | Get Public API Status | Check whether Notra's public API is reachable and discover its authentication metadata without a connected credential. |
| `NOTRA_GET_SKILL` | Get Skill | Returns a skill by name, including its full instructions and whether it is built into Notra. |
| `NOTRA_GET_WEBHOOK_DELIVERY` | Get Webhook Delivery | Get one Notra webhook delivery, including its serialized payload and complete attempt history. |
| `NOTRA_GET_WORKSPACE_CONTEXT` | Get Workspace Context | Return the workspace and authentication context bound to the connected Notra credential, optionally including pending workspace invitations. |
| `NOTRA_IMPORT_GEO_COMPETITORS` | Import GEO Competitors | Bulk create or update a project's persistent competitor list from up to 2,000 rows or CSV. Existing names are updated rather than duplicated; send the whole list in one request. Paid GEO operation limited to 10 requests per 10 minutes per organization. |
| `NOTRA_IMPORT_GEO_PROMPTS` | Import GEO Prompts | Bulk-persist up to 500 tracked prompts from rows or CSV. Existing prompts are skipped rather than duplicated. Requires paid GEO access and is limited to 10 requests per 10 minutes per organization. |
| `NOTRA_ISSUE_GEO_INGEST_TOKEN` | Issue Geo Ingest Token | Returns the current tracking token together with the install snippets. Pass `projectId` for a project-specific token; without it, the legacy token only accepts the organization's oldest project's hosts. Issuing does not invalidate previously issued tokens; use rotation for that. Issue a sensitive GEO ingest bearer token. Store the returned token securely and never log or expose it. |
| `NOTRA_LIST_AGENT_SESSIONS` | List Agent Sessions | Returns recent agent sessions and their linked chat IDs, origin surfaces, statuses, and timestamps. Results can contain sensitive conversation metadata. |
| `NOTRA_LIST_BRAND_IDENTITIES` | List Brand Identities | List the workspace's brand identities, with the default first, for selecting brand context in content and GEO workflows. |
| `NOTRA_LIST_CHATS` | List Chats | List the workspace's Notra chat sessions without loading message histories. |
| `NOTRA_LIST_EVENT_TRIGGERS` | List Event Triggers | Returns the organization's GitHub event triggers, optionally filtered to triggers monitoring any of the supplied repository IDs. |
| `NOTRA_LIST_FEEDBACK` | List Feedback | List workspace feedback with optional triage-status, kind, and project filters. |
| `NOTRA_LIST_GEO_CHANGES` | List GEO Changes | Compare the two latest stored paid-plan GEO scans without starting a new scan. |
| `NOTRA_LIST_GEO_COMPETITORS` | List GEO Competitors | List competitors tracked for a GEO project. Requires an active GEO plan. |
| `NOTRA_LIST_GEO_CONTENT_BRIEFS` | List GEO Content Briefs | List stored paid-plan GEO briefs. This read does not plan, approve, or bill work. |
| `NOTRA_LIST_GEO_CONTENT_GAPS` | List GEO Content Gaps | Read paid-plan content opportunities and linked briefs. This does not plan, approve, or bill content work. |
| `NOTRA_LIST_GEO_PROJECTS` | List GEO Projects | List the connected workspace's paid GEO projects and their brand associations. |
| `NOTRA_LIST_GEO_PROMPT_RESULT_SUMMARIES` | List GEO Prompt Result Summaries | Return one bounded page of stored paid-plan prompt result summaries; no scan is started. |
| `NOTRA_LIST_GEO_PROMPTS` | List GEO Prompts | List custom and automatically derived prompts tracked for a GEO project. Requires an active GEO plan. |
| `NOTRA_LIST_GEO_SCANS` | List GEO Scans | List paginated GEO scans with planned, completed, mentioned, and failed check totals by engine plus safe failure metadata. Requires an active GEO plan. |
| `NOTRA_LIST_GEO_SENTIMENT_EVIDENCE` | List GEO Sentiment Evidence | Return one bounded page of stored paid-plan sentiment evidence without starting analysis. |
| `NOTRA_LIST_GEO_SEQUENCES` | List GEO Sequences | List tracked multi-turn GEO prompt sequences. Requires an active GEO plan. |
| `NOTRA_LIST_GEO_SHELF_SOURCES` | List GEO Shelf Sources | Return one bounded page of paid-plan cited and tracked GEO sources without starting a scan. |
| `NOTRA_LIST_GEO_TRAFFIC_JOURNEYS` | List GEO Traffic Journeys | List a bounded set of paid-plan AI traffic journeys without changing tracking setup. |
| `NOTRA_LIST_GEO_TRAFFIC_PAGES` | List GEO Traffic Pages | List a bounded paid-plan ranking of pages visited by AI traffic without changing tracking setup. |
| `NOTRA_LIST_INTEGRATIONS` | List Integrations | List enabled GitHub and Linear integrations and their IDs for use as Notra content-generation sources. The Slack list is always empty. |
| `NOTRA_LIST_POST_AUTHORS` | List Post Authors | List Notra post authors and their IDs for assigning authors to blog posts and changelogs. |
| `NOTRA_LIST_POSTS` | List Posts | List the connected workspace's posts, with filters for publication status, content type, and brand identity. Notra returns published posts only unless statuses includes both draft and published. |
| `NOTRA_LIST_SCHEDULES` | List Schedules | Returns the organization's cron schedules, newest first. repositoryMap maps each targeted GitHub integration ID to an owner/repo label. |
| `NOTRA_LIST_SKILLS` | List Skills | Returns the organization's skills sorted by name, including built-in system skills (isSystem: true). Skill content is omitted; use GET /v1/skills/{name} to read it. |
| `NOTRA_LIST_WEBHOOK_DELIVERIES` | List Webhook Deliveries | List Notra webhook delivery history at a specific offset, optionally filtered by delivery status. Increase offset to continue when has_more is true. |
| `NOTRA_LIST_WEBHOOKS` | List Webhooks | List Notra outbound webhook subscriptions without exposing their signing secrets. |
| `NOTRA_PLAN_GEO_CONTENT_BRIEF` | Plan GEO Content Brief | Plan and save a GEO content brief. This paid operation books AI credits; autoApprove also starts the billed writer. A 409 after four minutes may still finish, so do not retry; list briefs instead. |
| `NOTRA_POST_CHAT_MESSAGE` | Post Chat Message | Persist a message or tool-approval decisions in an existing paid Notra chat and wait for the full assistant stream. Earlier history is included automatically. The response is newline-delimited stream text and may run for an unbounded model/tool duration. Tool approvals can trigger external mutations; retrying can duplicate them. Limited with chat creation to 30 requests per minute per organization. |
| `NOTRA_RETRY_WEBHOOK_DELIVERY` | Retry Webhook Delivery | Queue a paid redelivery of a failed webhook while retaining its prior attempt history. This sends the payload to the external endpoint again and can duplicate downstream effects. |
| `NOTRA_ROTATE_GEO_INGEST_TOKEN` | Rotate Geo Ingest Token | Invalidates every tracking token previously issued for this organization and returns a fresh one. Deployments still sending the old token stop being accepted immediately. Irreversibly rotate the sensitive GEO ingest bearer token, immediately invalidating the previous token. Store the replacement securely and never log or expose it. |
| `NOTRA_RUN_GEO_SEQUENCE` | Run GEO Sequence | Irreversibly execute every turn of a tracked sequence against every available answer engine and record checks, consuming paid Notra model capacity. The synchronous call may take minutes and is limited to 10 runs per 10 minutes per organization. A 409 after four minutes means work continues; do not retry and instead read project GEO checks. |
| `NOTRA_SCHEDULE_POST` | Schedule Post | Schedule a paid future publication that marks the saved post published in Notra and can create and merge a GitHub pull request or post to X or LinkedIn. Replaces any schedule that has not started; later post edits are included. Publishing occurs within about one minute and transient failures retry automatically. |
| `NOTRA_SEND_AGENT_SESSION_MESSAGE` | Send Agent Session Message | Sends the next turn of an agent session. The server binds the session's stored continuation token, so the client-provided one is ignored. Answer input.requested events (tool approvals, questions) from the event stream via inputResponses. Send a paid message to an AI agent session. This can consume credits and produce unbounded streamed model output; do not retry blindly after an ambiguous failure. |
| `NOTRA_START_GEO_AGENT_READINESS_SCAN` | Start GEO Agent Readiness Scan | Queue a paid readiness scan of the project's linked website. This starts external scanning work; an identical in-flight scan may be reused. |
| `NOTRA_STREAM_AGENT_SESSION_EVENTS` | Stream Agent Session Events | Fetch and parse the durable NDJSON event response for an agent session after Notra closes the response, including input.requested events for tool approvals. This call does not deliver events incrementally and returned events can contain sensitive conversation content. |
| `NOTRA_SUBMIT_FEEDBACK` | Submit Feedback | Record feedback for the organization that owns the credential. Requires an API key with the feedback.write scope. Agents and MCP servers should post to the organization's feedback URL instead. Submit persistent workspace feedback. This paid write has no delete endpoint. |
| `NOTRA_SUBMIT_ORGANIZATION_FEEDBACK` | Submit Organization Feedback | Record feedback from an AI agent or integration by posting to the organization's feedback URL, as shown on the Feedback page in the dashboard. No credentials are required. Limited per source IP and per organization. Submit persistent feedback without authentication. This paid write has no delete endpoint and is rate-limited by source IP and organization. |
| `NOTRA_SUGGEST_GEO_COMPETITORS` | Suggest GEO Competitors | Use Notra's paid discovery operation to suggest competitors for a domain. Results are cached per organization and domain; requests are limited to 10 per 10 minutes per organization. |
| `NOTRA_UPDATE_BRAND_IDENTITY` | Update Brand Identity | Update selected fields of a Notra brand identity. This paid mutation can also change the organization's default identity by setting is_default to true. |
| `NOTRA_UPDATE_EVENT_TRIGGER` | Update Event Trigger | Replaces an existing GitHub event trigger's filters, monitored repositories, generated content type, and publishing settings. This paid operation changes future automation behavior. |
| `NOTRA_UPDATE_FEEDBACK` | Update Feedback | Changes a feedback entry's triage status and returns the updated entry. This is a paid write operation. |
| `NOTRA_UPDATE_GEO_PROJECT` | Update GEO Project | Rename a GEO project or relink its brand identity. This changes persistent project configuration and requires paid access and a GEO plan. |
| `NOTRA_UPDATE_GEO_PROMPT` | Update GEO Prompt | Enable or disable a tracked prompt, or replace labels on a custom prompt. This changes future scan coverage and requires paid GEO access. |
| `NOTRA_UPDATE_GEO_SEQUENCE` | Update GEO Sequence | Change a tracked sequence's name, turns, or enabled state. This affects future paid GEO runs. |
| `NOTRA_UPDATE_GEO_SETTINGS` | Replace GEO Settings | Replace the project's GEO settings and re-arm its recurring scan. Unknown engines or languages are rejected; hidden engine selections are retained, the prompt language remains tracked, and ZDR is disabled without its add-on. This persistent scheduling change requires paid access and a GEO plan. |
| `NOTRA_UPDATE_POST` | Update Post | Update selected fields of an existing Notra post. Markdown changes re-render content; when title is omitted, Notra derives it from the first markdown heading or keeps the existing title if there is no heading. Status changes can publish or unpublish the post, and content or metadata changes may sync a linked GitHub pull request. |
| `NOTRA_UPDATE_SCHEDULE` | Update Schedule | Replaces the schedule. Send the full schedule body; fields that are omitted are not preserved from the existing schedule. This paid operation replaces the schedule configuration and can change future generation or automatic publishing behavior. |
| `NOTRA_UPDATE_SKILL` | Update Skill | Updates the name, description, or content of a skill. System skills can be edited but not renamed. This paid operation changes an existing agent skill. |
| `NOTRA_UPSERT_GEO_COMPETITOR` | Upsert GEO Competitor | Create, update, or rename a persistent tracked competitor, matching names case-insensitively, and return the full list. Requires paid GEO access. |

## Supported Triggers

None listed.

## Installation and MCP Setup

### Path 1: SDK Installation

#### Path 1, Step 1: Install Composio

Install the Composio SDK, the OpenAI provider, and the OpenAI SDK
```python
pip install composio composio_openai openai
```

```typescript
npm install @composio/core @composio/openai openai
```

#### Path 1, Step 2: Create a Composio session

Initialize Composio with the OpenAI Responses provider and create a session scoped to Notra
```python
import json
from openai import OpenAI
from composio import Composio
from composio_openai import OpenAIResponsesProvider

composio = Composio(provider=OpenAIResponsesProvider())
client = OpenAI()

session = composio.create(user_id="your-user-id", toolkits=["notra"])
tools = session.tools()
```

```typescript
import OpenAI from "openai";
import { Composio } from "@composio/core";
import { OpenAIResponsesProvider } from "@composio/openai";

const composio = new Composio({ provider: new OpenAIResponsesProvider() });
const client = new OpenAI();

const session = await composio.create("your-user-id", { toolkits: ["notra"] });
const tools = await session.tools();
```

#### Path 1, Step 3: Run Notra tools with your agent

Send a request, execute the Notra tool calls through the session, and print the final answer
```python
response = client.responses.create(
    model="gpt-5.6-sol",
    tools=tools,
    input=[{"role": "user", "content": "Create a content item in Notra about how AI agents can improve customer feedback workflows"}],
)

while True:
    tool_calls = [o for o in response.output if o.type == "function_call"]
    if not tool_calls:
        break
    results = composio.provider.handle_tool_calls(response=response, session=session)
    response = client.responses.create(
        model="gpt-5.6-sol",
        tools=tools,
        previous_response_id=response.id,
        input=[
            {"type": "function_call_output", "call_id": call.call_id, "output": json.dumps(results[i])}
            for i, call in enumerate(tool_calls)
        ],
    )

print(response.output_text)
```

```typescript
let response = await client.responses.create({
  model: "gpt-5.6-sol",
  tools,
  input: [{ role: "user", content: "Create a content item in Notra about how AI agents can improve customer feedback workflows" }],
});

while (response.output.some((o) => o.type === "function_call")) {
  const outputs = await composio.provider.handleToolCalls(session, response.output);
  response = await client.responses.create({
    model: "gpt-5.6-sol",
    tools,
    previous_response_id: response.id,
    input: outputs,
  });
}

console.log(response.output_text);
```

### Path 2: MCP Server Setup

#### Path 2, Step 1: Install Composio

Install the Composio SDK and your agent framework
```python
pip install composio claude-agent-sdk
```

```typescript
npm install @composio/core ai @ai-sdk/mcp @ai-sdk/openai
```

#### Path 2, Step 2: Create a session with MCP enabled

Create a session scoped to Notra and read its MCP URL and headers
```python
from composio import Composio

composio = Composio()
session = composio.create(user_id="your-user-id", toolkits=["notra"], mcp=True)
```

```typescript
import { Composio } from "@composio/core";

const composio = new Composio();
const { mcp } = await composio.create("your-user-id", {
  toolkits: ["notra"],
  mcp: true,
});
```

#### Path 2, Step 3: Connect your agent to the MCP server

Pass the session's MCP URL and headers to your agent and run a Notra request
```python
import asyncio
from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions, AssistantMessage, TextBlock

options = ClaudeAgentOptions(
    mcp_servers={
        "composio": {
            "type": "http",
            "url": session.mcp.url,
            "headers": session.mcp.headers,
        }
    },
    system_prompt="You are a helpful assistant with access to Notra tools.",
    tools=[],
    allowed_tools=["mcp__composio__*"],
)

async def main():
    async with ClaudeSDKClient(options=options) as client:
        await client.query("Create a content item in Notra about how AI agents can improve customer feedback workflows")
        async for message in client.receive_response():
            if isinstance(message, AssistantMessage):
                for block in message.content:
                    if isinstance(block, TextBlock):
                        print(block.text)

asyncio.run(main())
```

```typescript
import { createMCPClient } from "@ai-sdk/mcp";
import { openai } from "@ai-sdk/openai";
import { generateText, stepCountIs } from "ai";

const client = await createMCPClient({
  transport: { type: "http", url: mcp.url, headers: mcp.headers },
});

const { text } = await generateText({
  model: openai("gpt-5.6-sol"),
  tools: await client.tools(),
  prompt: "Create a content item in Notra about how AI agents can improve customer feedback workflows",
  stopWhen: stepCountIs(10),
});

console.log(text);
await client.close();
```

## Why Use Composio?

### 1. AI Native Notra Integration

- Supports both Notra MCP and direct API based integrations
- Structured, LLM-friendly schemas for reliable content and workflow actions
- Rich coverage for creating, managing, and querying your Notra data

### 2. Managed Auth

- Securely connect Notra with API key authentication
- Central place to manage, scope, and revoke Notra access
- Per user and per environment credentials instead of hard-coded keys

### 3. Agent Optimized Design

- Tools are tuned using real error and success rates to improve reliability over time
- Comprehensive execution logs so you always know what ran, when, and on whose behalf

### 4. Enterprise Grade Security

- Fine-grained RBAC so you control which agents and users can access Notra
- Scoped, least privilege access to Notra resources
- Full audit trail of agent actions to support review and compliance

## Use Notra with any AI Agent Framework

Choose a framework you want to connect Notra with:

- [ChatGPT](https://composio.dev/toolkits/notra/framework/chatgpt)
- [Claude Cowork](https://composio.dev/toolkits/notra/framework/claude-cowork)
- [Hermes](https://composio.dev/toolkits/notra/framework/hermes-agent)
- [Atomic Agent](https://composio.dev/toolkits/notra/framework/atomic-agent)

## Related Toolkits

- [Composio](https://composio.dev/toolkits/composio) - Composio is an integration platform that connects AI agents with hundreds of business tools. It streamlines authentication and lets you trigger actions across services—no custom code needed.
- [Composio search](https://composio.dev/toolkits/composio_search) - Composio search is a unified web search toolkit spanning travel, e-commerce, news, financial markets, images, and more. It lets you and your apps tap into up-to-date web data from a single, easy-to-integrate service.
- [Perplexityai](https://composio.dev/toolkits/perplexityai) - Perplexityai delivers natural, conversational AI models for generating human-like text. Instantly get context-aware, high-quality responses for chat, search, or complex workflows.
- [Browser tool](https://composio.dev/toolkits/browser_tool) - Browser tool is a virtual browser integration that lets AI agents interact with the web programmatically. It enables automated browsing, scraping, and action-taking from any AI workflow.
- [Ai ml api](https://composio.dev/toolkits/ai_ml_api) - Ai ml api is a suite of AI/ML models for natural language and image tasks. It provides fast, scalable access to advanced AI capabilities for your apps and workflows.
- [Aivoov](https://composio.dev/toolkits/aivoov) - Aivoov is an AI-powered text-to-speech platform offering 1,000+ voices in over 150 languages. Instantly turn written content into natural, human-like audio for any application.
- [All images ai](https://composio.dev/toolkits/all_images_ai) - All-Images.ai is an AI-powered image generation and management platform. It helps you create, search, and organize images effortlessly with advanced AI capabilities.
- [AltTextLab](https://composio.dev/toolkits/alt_text_lab) - AltTextLab is an AI service that generates accessible, SEO-aware alt text for images. It helps teams make image content easier to understand, index, and publish.
- [Anthropic administrator](https://composio.dev/toolkits/anthropic_administrator) - Anthropic administrator is an API for managing Anthropic organizational resources like members, workspaces, and API keys. It helps you automate admin tasks and streamline resource management across your Anthropic organization.
- [Api labz](https://composio.dev/toolkits/api_labz) - Api labz is a platform offering a suite of AI-driven APIs and workflow tools. It helps developers automate tasks and build smarter, more efficient applications.
- [Apiframe](https://composio.dev/toolkits/apiframe) - Apiframe is an API platform for generating and managing AI images, videos, music, uploads, assets, jobs, and custom LoRAs. It gives developers one clean API for creative AI workflows without juggling multiple model providers.
- [Apipie ai](https://composio.dev/toolkits/apipie_ai) - Apipie ai is an AI model aggregator offering a single API for accessing top AI models from multiple providers. It helps developers build cost-efficient, latency-optimized AI solutions without juggling multiple integrations.
- [Arize AX](https://composio.dev/toolkits/arize_ax) - Arize AX is an AI engineering platform for tracing, evaluating, and improving AI applications. Use it to debug LLM behavior, compare experiments, and improve production AI quality.
- [Artificial Analysis](https://composio.dev/toolkits/artificial_analysis) - Artificial Analysis is an independent benchmarking platform for AI models and API providers. Use it to compare model intelligence, coding, math, pricing, latency, throughput, and arena rankings.
- [AssemblyAI](https://composio.dev/toolkits/assemblyai) - AssemblyAI is a speech-to-text and audio intelligence API for uploaded or hosted media. Use it to turn audio and video into accurate transcripts, summaries, and insights.
- [Astica ai](https://composio.dev/toolkits/astica_ai) - Astica ai provides APIs for computer vision, NLP, and voice synthesis. Integrate advanced AI features into your app with a single API key.
- [Avoma](https://composio.dev/toolkits/avoma) - Avoma is an AI meeting assistant for recording, transcribing, analyzing, and managing meetings, calls, notes, scorecards, and conversation intelligence. It helps teams turn conversations into searchable notes, follow-ups, coaching insights, and revenue intelligence.
- [Bigml](https://composio.dev/toolkits/bigml) - BigML is a machine learning platform that lets you build, train, and deploy predictive models from your data. Its intuitive interface and robust API make machine learning accessible and efficient.
- [Black Forest Labs](https://composio.dev/toolkits/bfl) - Black Forest Labs provides hosted FLUX models for generating and editing images and videos. It offers fast, flexible media creation with asynchronous processing and fine-tuning support.
- [Bland AI](https://composio.dev/toolkits/bland_ai) - Bland AI is a conversational AI platform for building voice agents, phone calls, messaging, and communication workflows. Use it to automate calling, evaluate conversations, and run voice operations at scale.

## Frequently Asked Questions

### Do I need my own developer credentials to use Notra with Composio?

Yes, Notra requires you to configure your own API key credentials. Once set up, Composio handles secure credential storage and API request handling for you.

### Can I use multiple toolkits together?

Yes! Composio's Tool Router enables agents to use multiple toolkits. [Learn more](https://docs.composio.dev/tool-router/overview).

### Is Composio secure?

Composio is SOC 2 and ISO 27001 compliant with all data encrypted in transit and at rest. [Learn more](https://trust.composio.dev).

### What if the API changes?

Composio maintains and updates all toolkit integrations automatically, so your agents always work with the latest API versions.

---
[See all toolkits](https://composio.dev/toolkits) · [Composio docs](https://docs.composio.dev/llms.txt)
