MCP Server
Connect the Nowing MCP server to Claude Code, Codex, OpenCode, Cursor, and other MCP clients, step by step
Nowing MCP Server
The Nowing MCP server exposes your workspace to any Model Context Protocol client. Your agent gets 25 native, typed tools: every scraper (Reddit, YouTube, Instagram, TikTok, Amazon, Google Maps, Google Search, web crawl), full knowledge-base access (search, read, add, upload, update, delete), and a workspace selector.
Connect it two ways: the hosted server at https://mcp.nowing.com/mcp (nothing to install — just an API key), or run it yourself over stdio against any Nowing backend, cloud or self-hosted.
Create an API key
You need a Nowing API key either way. In Nowing, open API Playground → API Keys in your workspace sidebar:
- Toggle API key access on for the workspace.
- Create a personal API key (
nw_pat_…) and copy it — it is shown only once.
Connect (hosted)
The hosted server runs at https://mcp.nowing.com/mcp. Point your client at it and send the key as a Bearer token — there is nothing to install and no backend to run. For clients that read an mcpServers map (Cursor, and others):
{
"mcpServers": {
"nowing": {
"url": "https://mcp.nowing.com/mcp",
"headers": { "Authorization": "Bearer nw_pat_your_key_here" }
}
}
}Claude Code, from a terminal:
claude mcp add --transport http nowing https://mcp.nowing.com/mcp \
--header "Authorization: Bearer nw_pat_your_key_here"Most MCP clients accept this url + headers form; check your client's docs for its exact remote-server field.
Self-host (stdio)
Run the server yourself when you host your own backend or use a client without remote support. It runs with uv — install it once, then from the Nowing repository run:
cd nowing_mcp
uv syncPoint the server at your backend with NOWING_BASE_URL:
- Nowing Cloud:
https://api.nowing.com - Self-hosted: wherever your backend runs, e.g.
http://localhost:8000
Every client below launches the same command — uv run --directory <path-to>/nowing_mcp python -m mcp_server — and passes NOWING_BASE_URL and NOWING_API_KEY as environment variables. Replace the placeholder paths and key with yours.
Run one command in a terminal:
claude mcp add nowing \
-e NOWING_BASE_URL=https://api.nowing.com \
-e NOWING_API_KEY=nw_pat_your_key_here \
-- uv run --directory /path/to/Nowing/nowing_mcp python -m mcp_serverStart Claude Code and run /mcp — nowing should be listed as connected. Add --scope project to share the server (without the key) via a checked-in .mcp.json.
Add to ~/.codex/config.toml (or a project's .codex/config.toml):
[mcp_servers.nowing]
command = "uv"
args = ["run", "--directory", "/path/to/Nowing/nowing_mcp", "python", "-m", "mcp_server"]
[mcp_servers.nowing.env]
NOWING_BASE_URL = "https://api.nowing.com"
NOWING_API_KEY = "nw_pat_your_key_here"Or use the CLI: codex mcp add nowing -e NOWING_API_KEY=... -- uv run --directory ... python -m mcp_server. Verify with codex mcp list.
Add to opencode.json in your project root (or ~/.config/opencode/opencode.json globally):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"nowing": {
"type": "local",
"command": ["uv", "run", "--directory", "/path/to/Nowing/nowing_mcp", "python", "-m", "mcp_server"],
"enabled": true,
"environment": {
"NOWING_BASE_URL": "https://api.nowing.com",
"NOWING_API_KEY": "nw_pat_your_key_here"
}
}
}
}OpenCode's format differs from most clients: the root key is mcp (not mcpServers), the command is a single array, and environment variables go under environment (not env).
Add to ~/.cursor/mcp.json (global — keeps the key out of your repo) or a project's .cursor/mcp.json:
{
"mcpServers": {
"nowing": {
"command": "uv",
"args": ["run", "--directory", "/path/to/Nowing/nowing_mcp", "python", "-m", "mcp_server"],
"env": {
"NOWING_BASE_URL": "https://api.nowing.com",
"NOWING_API_KEY": "nw_pat_your_key_here"
}
}
}
}Then open Cursor Settings → MCP and refresh the nowing server; its 25 tools should appear with a green dot.
Open Settings → Developer → Edit Config to reach claude_desktop_config.json, and add the same mcpServers block as Cursor:
{
"mcpServers": {
"nowing": {
"command": "uv",
"args": ["run", "--directory", "/path/to/Nowing/nowing_mcp", "python", "-m", "mcp_server"],
"env": {
"NOWING_BASE_URL": "https://api.nowing.com",
"NOWING_API_KEY": "nw_pat_your_key_here"
}
}
}
}Restart Claude Desktop; Nowing appears under the tools icon in the chat input.
Add to .vscode/mcp.json in your workspace (or run the MCP: Add Server command). Note VS Code uses a servers key:
{
"servers": {
"nowing": {
"type": "stdio",
"command": "uv",
"args": ["run", "--directory", "/path/to/Nowing/nowing_mcp", "python", "-m", "mcp_server"],
"env": {
"NOWING_BASE_URL": "https://api.nowing.com",
"NOWING_API_KEY": "nw_pat_your_key_here"
}
}
}
}Open Copilot Chat in agent mode and click the tools icon to confirm the server is loaded.
Add the standard mcpServers block to ~/.codeium/windsurf/mcp_config.json (or via Windsurf Settings → Cascade → MCP Servers):
{
"mcpServers": {
"nowing": {
"command": "uv",
"args": ["run", "--directory", "/path/to/Nowing/nowing_mcp", "python", "-m", "mcp_server"],
"env": {
"NOWING_BASE_URL": "https://api.nowing.com",
"NOWING_API_KEY": "nw_pat_your_key_here"
}
}
}
}Press refresh in the MCP panel to pick up the server.
Add the standard mcpServers block to ~/.gemini/settings.json (or .gemini/settings.json in a project):
{
"mcpServers": {
"nowing": {
"command": "uv",
"args": ["run", "--directory", "/path/to/Nowing/nowing_mcp", "python", "-m", "mcp_server"],
"env": {
"NOWING_BASE_URL": "https://api.nowing.com",
"NOWING_API_KEY": "nw_pat_your_key_here"
}
}
}
}Run /mcp inside Gemini CLI to confirm the server and its tools.
stdio transport — nothing to keep running
In this mode your client launches the process on demand and shuts it down with the session. There is no daemon to manage — only your Nowing backend needs to be up. (The hosted server above needs none of this.)
Test it
In a fresh agent session, try:
list my Nowing workspaces
That calls nowing_list_workspaces — the simplest end-to-end check of the key, backend, and server. Then try a real task:
find the top subreddits discussing NotebookLM and save a summary note to my workspace
Configuration reference
For self-host (stdio), all settings are environment variables passed by the client. The hosted server needs only your API key in the Authorization header:
| Variable | Required | Default | Purpose |
|---|---|---|---|
NOWING_API_KEY | Yes | — | API key from API Playground → API Keys |
NOWING_BASE_URL | No | http://localhost:8000 | Backend to talk to |
NOWING_WORKSPACE | No | — | Default workspace by name or id, so agents skip selection |
NOWING_TIMEOUT | No | 180 | Request timeout in seconds |
Troubleshooting
- 401 errors — the API key is wrong or expired; create a new one.
- 403 errors — API access is disabled for the workspace; toggle API key access on under API Playground → API Keys.
- "Could not reach Nowing" — the backend isn't running or
NOWING_BASE_URLis wrong. - Server won't start — run
uv run python -m mcp_server.selfcheckinsidenowing_mcp; it verifies all 25 tools register without needing a backend.
Tools reference
| Group | Tools |
|---|---|
| Workspaces | nowing_list_workspaces, nowing_select_workspace |
| Scrapers | nowing_reddit_scrape, nowing_youtube_scrape, nowing_youtube_comments, nowing_instagram_scrape, nowing_instagram_details, nowing_tiktok_scrape, nowing_tiktok_comments, nowing_tiktok_user_search, nowing_tiktok_trending, nowing_google_maps_scrape, nowing_google_maps_reviews, nowing_google_search, nowing_web_crawl, nowing_list_scraper_runs, nowing_get_scraper_run |
| Knowledge base | nowing_search_knowledge_base, nowing_list_documents, nowing_get_document, nowing_add_document, nowing_upload_file, nowing_update_document, nowing_delete_document |
Usage is billed exactly like the REST API — scraper tools are metered per returned item, and every call is recorded under API Playground → Runs.