Connect to Nowen via MCP

Last updated: 2026-07-29

Nowen exposes an MCP server so AI assistants (Claude Desktop, Claude Code, any MCP-compatible client) can search published ideas, generate new ones, and manage your account directly from a chat.

  • Server URL: https://mcp.nowen.ai/api/mcp
  • Transport: Streamable HTTP
  • Auth: OAuth 2.1 with PKCE (dynamic client registration supported) — most MCP clients handle the whole flow automatically the first time you add the server.

Connect

  1. In your MCP client, add a new remote server pointing at https://mcp.nowen.ai/api/mcp.
  2. Your client will discover the OAuth endpoints from https://mcp.nowen.ai/.well-known/oauth-authorization-server and https://mcp.nowen.ai/.well-known/oauth-protected-resource, then open your browser to sign in to Nowen and approve access.
  3. Approve the requested scopes (read / generate / claim) on the consent screen.
  4. Your client exchanges the authorization code for an access token and is ready to use the tools below.

Claude Desktop / Claude Code example

{
  "mcpServers": {
    "nowen": {
      "url": "https://mcp.nowen.ai/api/mcp"
    }
  }
}

Scopes

Scope Grants
ideas:read Search/browse published ideas, list your conversations, check your tier/quota.
ideas:generate Generate new ideas from a description and read back the results.
ideas:claim Copy a public idea or claim an auto-published one into your own workspace.

Read tools (ideas:read)

search_ideas

Search published ideas — scope: ideas:read (Read)

Semantic search over every published idea. Optionally filter by category/segment/industry/keyword.

Read-only.

Input schema:

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1,
      "description": "Natural-language search query."
    },
    "category": {
      "type": "string"
    },
    "segment": {
      "type": "string"
    },
    "industry": {
      "type": "string"
    },
    "keyword": {
      "type": "string"
    },
    "limit": {
      "description": "Max results, default 20.",
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}

list_ideas

List published ideas — scope: ideas:read (Read)

Paginated listing of every published idea (24 per page), newest first.

Read-only.

Input schema:

{
  "type": "object",
  "properties": {
    "page": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "additionalProperties": false
}

get_idea

Get a published idea — scope: ideas:read (Read)

Fetches one published idea’s full public detail by its slug.

Read-only.

Input schema:

{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string"
    }
  },
  "required": [
    "slug"
  ],
  "additionalProperties": false
}

list_categories

List categories — scope: ideas:read (Read)

Every category label currently in use across published ideas.

Read-only.

Input schema:

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

list_segments

List segments — scope: ideas:read (Read)

Every segment label currently in use across published ideas.

Read-only.

Input schema:

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

list_industries

List industries — scope: ideas:read (Read)

Every industry label currently in use across published ideas.

Read-only.

Input schema:

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

list_keywords

List keywords — scope: ideas:read (Read)

Every browse/search keyword currently in use across published ideas.

Read-only.

Input schema:

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

list_ideas_in

List ideas in a category/segment/industry/keyword — scope: ideas:read (Read)

Every published idea matching one taxonomy axis value (from list_categories/list_segments/list_industries/list_keywords).

Read-only.

Input schema:

{
  "type": "object",
  "properties": {
    "axis": {
      "type": "string",
      "enum": [
        "category",
        "segment",
        "industry",
        "keyword"
      ]
    },
    "value": {
      "type": "string"
    }
  },
  "required": [
    "axis",
    "value"
  ],
  "additionalProperties": false
}

list_conversations

List my conversations — scope: ideas:read (Read)

Lists the caller’s own conversations (bidirectional with the Nowen web app — conversations created there or via MCP are the same list).

Read-only.

Input schema:

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

get_conversation

Get one of my conversations — scope: ideas:read (Read)

Fetches one of the caller’s own conversations by id (Free-tier fields redacted, matching the web app).

Read-only.

Input schema:

{
  "type": "object",
  "properties": {
    "conversationId": {
      "type": "string"
    }
  },
  "required": [
    "conversationId"
  ],
  "additionalProperties": false
}

get_entitlement

Get my tier & quota — scope: ideas:read (Read)

The caller’s current tier (Free/Paid) and, for Free tier, their 30-day generation quota status.

Read-only.

Input schema:

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Generate tools (ideas:generate)

generate_ideas

Generate business ideas — scope: ideas:generate (Generate)

Starts generating 5 ranked business ideas from a free-text description of the caller’s skills/interests/background. Returns a conversationId IMMEDIATELY — poll check_ideas_status, then call get_ideas once done.

Input schema:

{
  "type": "object",
  "properties": {
    "description": {
      "type": "string",
      "minLength": 1,
      "description": "Free-text description of the caller's skills, domain expertise, and interests."
    },
    "consent": {
      "description": "Free-tier accounts ONLY: must be true, acknowledging these ideas auto-publish anonymously to the public portal after 14 days. Ignored for Paid accounts.",
      "type": "boolean"
    }
  },
  "required": [
    "description"
  ],
  "additionalProperties": false
}

check_ideas_status

Check generation status — scope: ideas:generate (Generate)

Checks progress for a conversation started via generate_ideas — the latest curated progress message/percent, and whether it’s done.

Read-only.

Input schema:

{
  "type": "object",
  "properties": {
    "conversationId": {
      "type": "string"
    }
  },
  "required": [
    "conversationId"
  ],
  "additionalProperties": false
}

get_ideas

Get generated ideas — scope: ideas:generate (Generate)

Returns the ranked ideas for a conversation started via generate_ideas, once check_ideas_status reports done (Free-tier fields redacted).

Read-only.

Input schema:

{
  "type": "object",
  "properties": {
    "conversationId": {
      "type": "string"
    }
  },
  "required": [
    "conversationId"
  ],
  "additionalProperties": false
}

answer_clarification

Answer clarifying questions — scope: ideas:generate (Generate)

Answers the clarifying questions surfaced by check_ideas_status (needsClarification: true) so generation can proceed. Not Paid-gated — part of the free generate flow, matching the answer-clarification web endpoint.

Input schema:

{
  "type": "object",
  "properties": {
    "conversationId": {
      "type": "string"
    },
    "answers": {
      "type": "string",
      "minLength": 1,
      "description": "Free-text answers to the clarifying questions."
    }
  },
  "required": [
    "conversationId",
    "answers"
  ],
  "additionalProperties": false
}

generate_more_ideas

Generate another batch of ideas — scope: ideas:generate (Generate)

Paid-only: starts a new iteration of 5 more ideas for an existing conversation, appended to whatever’s already there (never replaces prior iterations). Optionally updates the conversation’s input first. Poll check_ideas_status/get_ideas afterward.

Input schema:

{
  "type": "object",
  "properties": {
    "conversationId": {
      "type": "string"
    },
    "input": {
      "description": "If provided and different from the current input, updates it before generating.",
      "type": "string"
    }
  },
  "required": [
    "conversationId"
  ],
  "additionalProperties": false
}

refine_idea

Refine an idea (Advisor chat) — scope: ideas:generate (Generate)

Paid-only: sends one message to a specific idea’s Advisor chat — full parity with the web app’s per-idea Advisor (can update the idea’s content, copy, tags, or roadmap). Returns the assistant’s reply, a summary of any tool actions taken, and the idea after the turn.

Input schema:

{
  "type": "object",
  "properties": {
    "conversationId": {
      "type": "string"
    },
    "ideaId": {
      "type": "string"
    },
    "message": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "conversationId",
    "ideaId",
    "message"
  ],
  "additionalProperties": false
}

get_idea_advisor

Get an idea’s Advisor chat history — scope: ideas:generate (Generate)

Paid-only: the full message history of one idea’s Advisor chat thread.

Read-only.

Input schema:

{
  "type": "object",
  "properties": {
    "conversationId": {
      "type": "string"
    },
    "ideaId": {
      "type": "string"
    }
  },
  "required": [
    "conversationId",
    "ideaId"
  ],
  "additionalProperties": false
}

clear_idea_advisor

Clear an idea’s Advisor chat — scope: ideas:generate (Generate)

Paid-only: permanently deletes one idea’s whole Advisor chat history (does not touch the idea itself). Irreversible.

Destructive: cannot be undone.

Input schema:

{
  "type": "object",
  "properties": {
    "conversationId": {
      "type": "string"
    },
    "ideaId": {
      "type": "string"
    }
  },
  "required": [
    "conversationId",
    "ideaId"
  ],
  "additionalProperties": false
}

conversation_advisor_send

Message the conversation-level Advisor — scope: ideas:generate (Generate)

Paid-only: sends one message to the whole-conversation Advisor (discusses every idea/iteration, can start a new iteration or hand off to a specific idea). Returns the assistant’s reply and a summary of any tool actions taken. A generate_iteration tool event means a new batch of ideas was started — poll check_ideas_status/get_ideas afterward. A focus_idea event carries the ideaId/ideaTitle the Advisor suggested developing further.

Input schema:

{
  "type": "object",
  "properties": {
    "conversationId": {
      "type": "string"
    },
    "message": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "conversationId",
    "message"
  ],
  "additionalProperties": false
}

conversation_advisor_messages

Get the conversation-level Advisor’s chat history — scope: ideas:generate (Generate)

Paid-only: the full message history of the whole-conversation Advisor thread.

Read-only.

Input schema:

{
  "type": "object",
  "properties": {
    "conversationId": {
      "type": "string"
    }
  },
  "required": [
    "conversationId"
  ],
  "additionalProperties": false
}

conversation_advisor_clear

Clear the conversation-level Advisor’s chat — scope: ideas:generate (Generate)

Paid-only: permanently deletes the whole-conversation Advisor’s chat history. Irreversible.

Destructive: cannot be undone.

Input schema:

{
  "type": "object",
  "properties": {
    "conversationId": {
      "type": "string"
    }
  },
  "required": [
    "conversationId"
  ],
  "additionalProperties": false
}

publish_idea

Publish an idea to the public portal — scope: ideas:generate (Generate)

Paid-only: publishes one idea, either as a protected showcase (default) or fully public/copyable (public: true).

Input schema:

{
  "type": "object",
  "properties": {
    "conversationId": {
      "type": "string"
    },
    "ideaId": {
      "type": "string"
    },
    "public": {
      "description": "true = fully public and copyable via use_public_idea; default/false = protected showcase.",
      "type": "boolean"
    }
  },
  "required": [
    "conversationId",
    "ideaId"
  ],
  "additionalProperties": false
}

unpublish_idea

Unpublish an idea — scope: ideas:generate (Generate)

Paid-only: pulls one of the caller’s own ideas back to Private, deleting its published blob. Works for either publish kind.

Input schema:

{
  "type": "object",
  "properties": {
    "conversationId": {
      "type": "string"
    },
    "ideaId": {
      "type": "string"
    }
  },
  "required": [
    "conversationId",
    "ideaId"
  ],
  "additionalProperties": false
}

Claim tools (ideas:claim)

use_public_idea

Copy a public idea — scope: ideas:claim (Claim)

Copies a fully-public (“publishKind: public”) idea into the caller’s own workspace as a brand-new, independent conversation. The original stays with its author.

Input schema:

{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string"
    }
  },
  "required": [
    "slug"
  ],
  "additionalProperties": false
}

claim_idea

Claim an auto-published idea — scope: ideas:claim (Claim)

Transfers ownership of an Auto-published idea’s WHOLE conversation to the caller, once past its privatization window. Requires a Paid account. Destructive: the original author loses the conversation entirely.

Destructive: cannot be undone.

Input schema:

{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string"
    }
  },
  "required": [
    "slug"
  ],
  "additionalProperties": false
}

Resources

idea://{slug}

Published idea — scope: ideas:read (Read) — application/json

portal://meta

Public portal metadata — scope: ideas:read (Read) — application/json

conversation://{conversationId}

One of the caller’s conversations — scope: ideas:read (Read) — application/json

Prompts

generate_business_ideas

Turn my background into ranked business ideas — scope: ideas:generate (Generate)

A starter prompt that walks through generating 5 ranked business ideas from your background.

Arguments:

{
  "type": "object",
  "properties": {
    "background": {
      "description": "Optional free-text background/skills/interests — if omitted, ask the user first.",
      "type": "string"
    }
  },
  "additionalProperties": false
}

Manage connected apps

Revoke access for any connected MCP client at any time from Connected Apps in your Nowen account settings.