# North Noir MCP MCP Server

> **North Noir MCP MCP Server** is a hosted, multitenant Model Context Protocol (MCP) server run by **MewCP** (https://mewcp.com), giving AI agents managed access to North Noir MCP.
>
> MewCP takes care of all MCP infrastructure for you — credential storage, OAuth flows,
> token refresh, and production-grade auto-scaling — so your AI agents can connect to
> third-party services and run freely without you managing any MCP server yourself.
>
> Server page:  https://mewcp.com/mcp/northnoir-mcp
> MewCP docs:   https://docs.mewcp.com
> Full catalog: https://mewcp.com/llms.txt

---

## About

North Noir generates AI-drawn videos from text prompts by rendering animated frames in code. Create story-driven videos, add narration, music, and sound effects, inspect and refine individual scenes, track rendering jobs, and export finished videos for content creation.

---

## Details

- Server ID: `northnoir-mcp`
- Version: 0.1.0
- Tools: 30
- Authentication: OAuth, managed by MewCP
- Transport: http

---

## Access

The gateway URL below serves your **entire MewCP toolset**, not this server on its
own. Pasting a config snippet is not enough — North Noir MCP has to be in the toolset
first. In order:

1. Add North Noir MCP to your toolset at https://mewcp.com/mcp/northnoir-mcp
2. Connect your North Noir MCP account (OAuth); MewCP stores the credential and attaches it to each call
3. Copy your MewCP API key from the dashboard (Developer)
4. Configure your client with the snippet for it below

Once connected, an agent does **not** see this server's tools as top-level tools.
It sees four meta-tools and reaches everything through them:

- `search(query)` — find tools by keyword across the toolset
- `get_schema(tools)` — full description and arguments for the tools you picked
- `list_accounts(provider)` — only when one app has several connected accounts
- `call_tool(server_maskedId, tool_name, args)` — execute

So the list below is what `search` can return for this server, not a set of
callable tool names on their own.

---

## Tools (30)

Descriptions are truncated to 160 characters; call `get_schema`
for the full text and the argument schema. Where a tool is annotated, its type
is shown — treat `destructive` as irreversible.

- `list_drawn_video_options` _(read)_ — List the styles and drawing models available for an AI-drawn video before creating one. North Noir is a one-model product: Ruvil 2.1, drawn in code by the AI…
- `create_drawn_video` _(write)_ — Start a paid North Noir AI-drawn video: the drawing model you choose writes the scene and subject, then every frame is composed in code at 30 fps, and any…
- `mcp_app_project_preview` _(read)_ — App-only. Signed playback URLs plus timing and canvas geometry for an MCP Studio project, so the widget can play the composite inline.
- `mcp_app_export_media` _(read)_ — App-only. A directly-playable signed URL for a finished export, so the widget can play it inline instead of linking out.
- `mcp_app_workflow_sections` _(read)_ — App-only. The per-section breakdown of a workflow (planned briefs, render status and progress), so the widget can show a section list while a job runs.
- `get_job` _(read)_ — Get status, progress, current phase, token usage, and result URL for an MCP Studio workflow or a plain North Noir API job. A project_url appears only once…
- `stop_job` _(destructive)_ — Stop a job that is still running — the same thing as pressing Stop in North Noir. Works for any job id returned by create_drawn_video, plan_drawn_video, or the…
- `adjust_project_graphic` _(write)_ — Adjust one rendered section of an MCP Studio project after inspecting it. Starts a paid re-render and exports a revised video; poll the returned workflow with…
- `export_project` _(write)_ — Assemble the current state of an MCP Studio project into a finished video and return a job to poll. This reuses the sections that are already rendered — it…
- `list_jobs` _(read)_ — List recent jobs created through North Noir MCP for this user.
- `inspect_project` _(read)_ — Inspect the timed sections in a hidden North Noir MCP Studio project using a project id returned by a workflow.
- `create_drawn_video_project` _(write)_ — Create an empty North Noir Studio project for an AI-drawn video (no uploaded footage). Returns a project_id used by every other tool in this pipeline. The…
- `create_stop_motion_project` _(write)_ — DEPRECATED alias of create_drawn_video_project: call create_drawn_video_project instead. Create an empty North Noir Studio project for an AI-drawn video (no…
- `plan_drawn_video` _(write)_ — Plan a from-scratch AI-drawn video: North Noir splits the brief into timed sections and writes each one's direction, then STOPS and returns a token estimate…
- `plan_stop_motion_video` _(write)_ — DEPRECATED alias of plan_drawn_video: call plan_drawn_video instead. Plan a from-scratch AI-drawn video: North Noir splits the brief into timed sections and…
- `confirm_drawn_video` _(write)_ — Give the go-ahead for whichever step an AI-drawn video job is waiting on. There are two such moments. First, at awaiting_confirmation: approves the quoted plan…
- `confirm_stop_motion_video` _(write)_ — DEPRECATED alias of confirm_drawn_video: call confirm_drawn_video instead. Give the go-ahead for whichever step an AI-drawn video job is waiting on. There are…
- `generate_story` _(write)_ — Start a North Noir story (1000–150000 words, narrative or screenplay, English/German/Spanish/French). Paid by token usage — a 402 free_plan_byok_required means…
- `get_story` _(read)_ — Poll a story started by generate_story: returns status (queued/processing/completed/failed), progress, batches done/total, words so far, and on completion the…
- `generate_narration` _(write)_ — Synthesise a voiceover from a script and place it on the project's narration track. Paid by character count. Call this once the project exists. The script…
- `generate_music` _(write)_ — Generate a looping background-music bed for the project and place it on the music track. Paid by length. Keep the prompt short and descriptive (mood, genre,…
- `generate_sfx` _(write)_ — Generate a short sound effect and place it on the project timeline. Paid by length. Keep the prompt short and concrete ("a wooden door creaks open, close mic").
- `generate_story_audio` _(write)_ — Read a script aloud as one long voiceover (better than generate_narration for a full read). Pass the script text in `story` — North Noir writes it into the…
- `list_providers` _(read)_ — List the providers a North Noir user can bring their own key for — AI labs, inference providers, aggregators, and image/video/audio/search services. Each entry…
- `list_provider_keys` _(read)_ — List the BYOK provider keys saved on the caller's North Noir account: which providers have a key, whether it is active, and the last four characters. Never…
- `add_provider_key` _(read)_ — Return a secure North Noir link where the user can paste a provider API key. This tool NEVER accepts a key: an API key must not be typed into an AI chat. Give…
- `test_provider_key` _(write)_ — Make the cheapest real call a provider offers and report whether the saved key works, marking it active or invalid. Paid only insofar as the provider may…
- `remove_provider_key` _(destructive)_ — Delete the caller's saved key for one provider. Runs that relied on it fall back to North Noir's own provider keys (and are billed for them). Ask the user to…
- `list_provider_models` _(read)_ — List the chat models the saved provider key can use, fetched live from the provider. Use it to choose a model before set_drawing_model. Read-only.
- `set_drawing_model` _(write)_ — Choose which model of a saved provider key does the drawing-model work (the LLM that writes the brief and plans the scene). North Noir probes the model before…

---

## Connect

Gateway URL: https://gateway.mewcp.com/personal/mcp

Every request carries one header:

    Authorization: Bearer <API_KEY>

Replace `API_KEY` with your own key from the dashboard (Developer).

## Apps

### Claude Desktop

Mac & Windows app

- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "mewcp": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote@latest",
        "https://gateway.mewcp.com/personal/mcp",
        "--header",
        "Authorization: Bearer API_KEY"
      ]
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it.

1. Open Claude Desktop → Settings → Developer → "Edit Config"
2. Paste the snippet inside the outer { } of the config file (merge with your existing "mcpServers" section if you have one)
3. Save the file and restart Claude Desktop
4. Start a new conversation — your tool will be available

### VS Code

Copilot / Cline

- Command Palette → "MCP: Open User Configuration" (opens mcp.json). For one project only, use .vscode/mcp.json instead.

```json
{
  "mcp.servers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have a "servers" section in your mcp.json? Just add the server entry inside it.

1. Open VS Code → Command Palette (Cmd+Shift+P / Ctrl+Shift+P)
2. Run "MCP: Open User Configuration" to open your mcp.json
3. Paste the snippet and save
4. Start the server when prompted (or from the MCP servers view) and use it in Copilot Chat

### Cursor

AI-first editor

- macOS: `~/.cursor/mcp.json`
- Windows: `%USERPROFILE%\.cursor\mcp.json`

```json
{
  "mcpServers": {
    "mewcp": {
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your mcp.json? Just add the server entry inside it.

1. Open Cursor → Settings → Cursor Settings → MCP
2. Click "Add new global MCP server"
3. Paste the snippet and save
4. Restart Cursor

### Codex

OpenAI's CLI agent

- Add the snippet to your Codex MCP config or your standard MCP config file for the CLI tool you use.

```json
{
  "mcpServers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Codex generally reads a standard MCP server block, so you can add this alongside your other configured servers.

1. Open your Codex MCP config or project-level config file
2. Paste the MewCP server block inside the config JSON/TOML structure your tool expects
3. Save the file and restart Codex
4. Verify the tool is available inside a fresh session

### Claude Code

Anthropic's CLI agent

- ~/.claude.json (user scope) or .mcp.json in your project root — create it if it doesn't exist. Or skip the file and use the CLI command below.

```json
{
  "mcpServers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it.

1. Open ~/.claude.json (or .mcp.json in your project root) in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcpServers" section if you have one)
3. Save the file and start (or restart) Claude Code
4. Or skip the file entirely and run the CLI command below instead

### OpenCode

Open-source terminal agent

- ~/.config/opencode/opencode.json (global) or opencode.json in your project root — create it if it doesn't exist.

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mewcp": {
      "type": "remote",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "enabled": true,
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcp" section in your opencode.json? Just add the server entry inside it.

1. Open ~/.config/opencode/opencode.json (or opencode.json in your project root) in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcp" section if you have one)
3. Save the file and start (or restart) OpenCode

### OpenClaw

Self-hosted agent gateway

- ~/.openclaw/openclaw.json — create it if it doesn't exist.

```json
{
  "mcp": {
    "servers": {
      "mewcp": {
        "transport": "streamable-http",
        "url": "https://gateway.mewcp.com/personal/mcp",
        "enabled": true,
        "headers": {
          "Authorization": "Bearer API_KEY"
        }
      }
    }
  }
}
```

Already have an "mcp" section in your openclaw.json? Just add the server entry inside "servers".

1. Open ~/.openclaw/openclaw.json in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcp" section if you have one)
3. Save the file and restart OpenClaw

### Antigravity

Google's agentic IDE

- ~/.gemini/config/mcp_config.json (global) or .agents/mcp_config.json (workspace-local) — create it if it doesn't exist.

```json
{
  "mcpServers": {
    "mewcp": {
      "serverUrl": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it. Remote servers must use the "serverUrl" field — the legacy "url"/"httpUrl" fields aren't supported.

1. In the editor's agent side panel, click "…" → "MCP Servers" → "Manage MCP Servers" → "View raw config" (Antigravity CLI: type /mcp instead to open the Interactive MCP Manager)
2. Paste the snippet inside the outer { } (merge with your existing "mcpServers" section if you have one)
3. Save the file — the server connects automatically

### Hermes

Nous Research's CLI agent

- config.yaml in your Hermes config directory (~/.hermes) — add this under a top-level "mcp_servers:" key.

```yaml
mcp_servers:
  mewcp:
    url: "https://gateway.mewcp.com/personal/mcp"
    headers:
      Authorization: "Bearer API_KEY"
```

Already have an "mcp_servers" section in your config.yaml? Just add the server entry inside it.

1. Open config.yaml in your Hermes config directory
2. Paste the snippet under the top-level "mcp_servers:" key (merge with existing entries if you have any)
3. Save the file, then run /reload-mcp in Hermes (or start a fresh session)
4. Ask Hermes "Tell me which MCP-backed tools are available right now" to confirm it connected

### DeepSeek Harness

DeepSeek's agent harness

- cordis.yml in your DSH project — or the patch file you mount plugins from.

```yaml
- id: mcp-mewcp
  name: '@deepseek-ai/dsh-mcp-client'
  config:
    serverName: mewcp
    transport: streamable-http
    url: https://gateway.mewcp.com/personal/mcp
    headers:
      Authorization: "Bearer API_KEY"
```

One plugin instance = one MCP server. Add this entry to your plugin list; don't nest it inside another entry.

1. Open cordis.yml (or your patch file) in your DSH project
2. Paste the entry into your plugin list, keeping the leading dash and indentation
3. Restart DSH (or let HMR reload) — tools register as mcp__mewcp__<tool_name>
4. Verify with: dsh web --dump-config | grep -A3 mcp

## SDKs

### Python

fastmcp client

```python
import asyncio
from fastmcp import Client
from fastmcp.client.transports import StreamableHttpTransport

SERVER_URL = "https://gateway.mewcp.com/personal/mcp"
API_KEY = "API_KEY"

transport = StreamableHttpTransport(
    url=SERVER_URL,
    headers={
        "Authorization": f"Bearer {API_KEY}",
    }
)

async def main():
    client = Client(transport)
    async with client:
        tools = await client.list_tools()
        print(tools)

asyncio.run(main())
```

1. Install fastmcp: pip install fastmcp
2. Copy the snippet into your project
3. Replace API_KEY with your key from the dashboard
4. Run your script

### TypeScript

MCP SDK

```typescript
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";

const SERVER_URL = "https://gateway.mewcp.com/personal/mcp";
const API_KEY = "API_KEY";

const transport = new StreamableHTTPClientTransport(new URL(SERVER_URL), {
  requestInit: {
    headers: {
      Authorization: `Bearer ${API_KEY}`,
    },
  },
});

const client = new Client({ name: "mewcp-client", version: "1.0.0" });
await client.connect(transport);

const tools = await client.listTools();
console.log(tools.tools.map((t) => t.name));
```

1. Install: npm install @modelcontextprotocol/sdk
2. Copy the snippet into your project
3. Replace API_KEY with your key from the dashboard
4. Run with Node 18+ as an ES module (e.g. npx tsx script.ts)