Google Search Console integration for Model Context Protocol (MCP)
Nutcracker is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Creative work for brand teams: strategy, copy, ideas, research, decks, key visuals and video ads.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http nutcracker-mcp https://heynutcracker.com/mcp
# 2 — ask your agent for something these tools do
# list_spaces, create_space, start_task and 20 more
Nutcracker costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http nutcracker-mcp https://heynutcracker.com/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
23 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Spaces in the connected workspace this user can open, most recently active first. path shows nesting ("Kova / Winter launch"): a sub-space also reads its parents' pinned docs and elements. scope says who sees the work: team is everyone in the workspace, personal is your human alone. Pass query to find one by name.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | no | Words to find in the path; any word matches, most words first. |
| cursor | string | no | next_cursor from the previous page. |
Make a space when list_spaces has none that fits. If this place already has a space with the name, that one comes back with created: false instead of a second. A sub-space (parent_id) also reads its parent's pinned docs and elements, and takes its parent's scope. Otherwise scope decides who sees it: personal, the default, is your human alone; team is everyone in the workspace, so make a team space
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| parent_id | string | no | A space id from list_spaces, to make a sub-space of it. |
| scope | string | no | Who sees a top-level space. Default personal. |
Start a creative task (writing, strategy, naming, ideas, research-backed docs) as a new Nutcracker chat in a space; the space brand memory and pins apply. Returns task_id and the chat url. A task takes minutes: poll get_task until it is no longer running.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| brief | string | yes | What you need, in plain words. |
| context | string | no | Facts, numbers, sources and constraints the work must rest on. |
| space_id | string | yes | A space id from list_spaces. |
| doc_ids | array | no | Docs, presentations or storyboards the task must read (ids from get_task, list_space or create_doc). |
| files | array | no | file_id values from sending files to upload_file urls. |
Where a task stands: running, needs_input (answer the question with reply), done, or failed. While running, progress names the step in flight (research, skill, ...; null while it thinks or writes the reply), its latest headline, and how many sources research has read. Returns the answer the latest reply ends with (a failed task: all it wrote) with evidence as links and [image card: name] where a c
| Parameter | Type | Required | Notes |
|---|---|---|---|
| task_id | string | yes | A task_id, or a chat id from list_space. |
| wait_seconds | number | no | Hold the call while the task, or once it is done its media, is still going, up to 45 seconds; it returns as soon as that ends. Use it instead of polling fast. |
| seen | string | no | The seen value from your last get_task: leaves out the reply, sources and cards you already read, and media that has not changed. Leave it out to read the cards and their prices again. |
| all_sources | boolean | no | List every source the task saw (sources_seen counts them), not only those the reply cites. |
Run one image or video card from get_task: this spends the workspace credits, so ask your human first, naming the card and its price. Refused when the price is no longer accept_price or the card now leaves out other images; read get_task again without seen then. The result lands in the task roll; poll get_task for files.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| task_id | string | yes | — |
| card | string | yes | A card id from get_task cards. |
| accept_price | yes | The card price your human agreed to; null when get_task shows no price (set when it runs). | |
| left_out | array | no | The card's left_out image ids, as get_task listed them. |
Send the next message in a task once get_task says it is not running: answer its question (an option or your own words) or ask for a revision. Or, in place of a message, pass another_ai for another model to write its own version of the latest reply, kept beside it in the app. Returns the same task_id; poll get_task again.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| task_id | string | yes | — |
| message | string | no | Required unless another_ai is set. |
| doc_ids | array | no | Docs, presentations or storyboards the task must read (ids from get_task, list_space or create_doc). |
| files | array | no | file_id values from sending files to upload_file urls. |
| another_ai | no | true for the next lab this task has not heard from, or a name from list_models with kind writer, only when your human named one ("GPT"). Works on a reply made with a skill. |
The models this user can use. image, video and sound: house default first, with sizes, ratios, lengths and what each takes. A task uses the default unless the brief or reply names one; prices show on the cards get_task returns. writer: the models another_ai on reply can name.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| kind | string | yes | — |
Get a link to send one image, video or document from your disk (logo, screenshot, product shot, PDF) for a task to work from. Send the file with an HTTP PUT, e.g. curl -T <path> '<upload_url>'; the answer is JSON with the file_id to pass in files on start_task or reply. The link works for 15 minutes. One file_id works for any number of tasks. Up to 100 MB; compress anything larger. Upload an image
| Parameter | Type | Required | Notes |
|---|---|---|---|
| filename | string | yes | Its name with extension, which sets how it is read. |
The workspace's credits left, before you plan or agree to media spend. unlimited means no credits limit spending and prices are for reference, since nothing is deducted; still ask your human before generate. blocked says why it can spend nothing now, and fix who can add more.
No parameter schema on file.
Read one roll of images, video and sound, newest first: each generation with its status, file urls and prompt (long ones end in …, a repeat reads "Same prompt as above."), and the roll's own @elements; list_elements has the space's. Pass query to find "the one where…" by words in its prompt, cursor to read on, or generation_ids for those generations with full prompts. Roll ids come from list_space
| Parameter | Type | Required | Notes |
|---|---|---|---|
| roll_id | string | yes | — |
| query | string | no | Words to find in prompts; any word matches, most words first. |
| generation_ids | array | no | Only these generations, with full prompts. |
| cursor | string | no | next_cursor from the previous page. |
The @elements of a space (a character, product or place with its reference sheet), including those it inherits from parent spaces: each name, description and media urls. Elements of a single roll are in read_roll.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| space_id | string | yes | A space id from list_spaces. |
Read a doc, presentation or storyboard as it is now, including edits the team made in the app. A doc comes back as Markdown and a presentation as its JSON. A storyboard comes back as its script: treatment, cast, each film's shots with seconds, action and lines, and a link to each picked frame. An evidence-card-ref fence is an exhibit the doc shows: keep it as it is when you rewrite the text.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| doc_id | string | yes | A doc id from get_task or list_space. |
| prompts | boolean | no | A storyboard only: also return each shot's frame prompt. |
Publish a doc, presentation or storyboard: returns its public read-only link, which anyone with the link can open without an account. Returns the existing link when there is one. The link shows in the doc Share panel.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| doc_id | string | yes | A doc id from get_task or list_space. |
Turn off the public link of a doc, presentation or storyboard. Anyone opening the old link gets nothing; a copy someone already saved stays with them.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| doc_id | string | yes | A doc id from get_task or list_space. |
A file of a doc, presentation or storyboard to download and attach: pdf or docx for a doc, pptx or pdf for a presentation, the frames as a zip for a storyboard (full size; zip_small to attach to a mail). To see how a presentation is drawn, read its pdf, or one slide as png with slide_id. Returns a download url that works for 15 minutes; the file is made when the url is fetched, which can take up t
| Parameter | Type | Required | Notes |
|---|---|---|---|
| doc_id | string | yes | A doc id from get_task or list_space. |
| format | string | no | Leave out for the usual file of its type. |
| slide_id | string | no | One slide of a presentation, as a png: an id from its slides in read_doc. |
Everything in one space: docs (type doc, deck for a presentation, or storyboard), chats, rolls of images and video, and uploaded assets, newest first, with app links and whether a doc has a public link. Pass cursor to read on. pins lists what every chat here reads, parent spaces included.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| space_id | string | yes | A space id from list_spaces. |
| cursor | string | no | next_cursor from the previous page. |
Make a new doc in a space from your Markdown, for material a task should read (pass its id in doc_ids) or a text your human wants kept. It starts private to your human; the team sees it once shared or pinned. A body in a file on your disk: leave out content, then send the file to the upload_url you get, e.g. curl -T <path> '<upload_url>'; the answer is the new doc, and each send makes another. The
| Parameter | Type | Required | Notes |
|---|---|---|---|
| space_id | string | yes | A space id from list_spaces. |
| title | string | yes | — |
| content | string | no | The doc body as Markdown. Leave out to send it from a file. |
Change a doc's text and nothing else in it. One passage: old_text and new_text. Add to the end: append_text. The whole body: content and updated_at from your read_doc, refused when anyone edited it since, so you never overwrite the team. The text it replaces stays in the doc's version history. Presentations and storyboards change only through a task.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| doc_id | string | yes | A doc id from get_task or list_space. |
| old_text | string | no | The passage, copied exactly from read_doc. It must appear once: add nearby words if it repeats. |
| new_text | string | no | What replaces old_text. Empty deletes it. |
| append_text | string | no | Markdown to add at the end of the doc. |
| content | string | no | The new whole doc body as Markdown. |
| updated_at | string | no | updated_at from your read_doc. Needed with content; otherwise it refuses a doc edited since. |
Pin a doc, presentation or storyboard to its space, so every chat in the space and its sub-spaces reads it: brand rules, a brief, a source the work must rest on. A doc still in its task chat is added to that chat's space first. A pin is team material: when it would share a private doc with the team or turn its reuse back on, this is refused; ask your human, then call again with share: true.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| doc_id | string | yes | A doc id from get_task or list_space. |
| share | boolean | no | true only once your human agreed to what the refusal named. |
Stop new chats reading a pin, when a round changes direction. Take pin_id and space_id from list_space; a pin held by a parent space comes off that space and everything under it. The doc itself stays, with the same access.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| pin_id | string | yes | — |
| space_id | string | yes | — |
Copy a doc, presentation or storyboard to start the next round from, keeping the original as it is. The copy is private to your human and lands in the same space when they can open it; comments, versions and sharing stay behind. A storyboard's copy picks from the same roll, and a presentation's drops slides not written yet.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| doc_id | string | yes | A doc id from get_task or list_space. |
Rename a doc, presentation or storyboard, file it in a space, or set who can open it. visibility org opens it to the team (ask your human first); a doc still in its task chat is filed in the chat space for that. visibility private also takes it off the web and out of its space's pins, and only its creator can set it.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| doc_id | string | yes | A doc id from get_task or list_space. |
| title | string | no | — |
| space_id | string | no | A space id from list_spaces to file it in. |
| visibility | string | no | — |
Keep the answer a task's latest finished reply ends with as a doc of that task, word for word, with its sources and evidence, so another task can read it (doc_ids) or you can pin, share or export it. The opening line and progress notes it wrote between steps are left out.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| task_id | string | yes | — |
| title | string | yes | — |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Nutcracker or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | moderate | capability blast radius (moderate) — client exposure if the model is manipulated | −3 |
| coverage-honesty | manifest | inspection depth (manifest) — how much of the target the scan could see | −4 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
The scan read each tool’s name, description, input schema and annotations exactly as the server listed them the last time it answered us; no code was reviewed. We ask the server again about once a month, and a list that changed is graded again.
The implementation source was not read — this reflects the declared tool metadata only.
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. moderate is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| list_spaces | no tags | |
| create_space | state-write | state-write: declares readOnlyHint: false |
| start_task | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| get_task | no tags | |
| generate | state-write | state-write: declares readOnlyHint: false |
| reply | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| list_models | no tags | |
| upload_file | external-sinkstate-write | external-sink: keyword "upload_file"; state-write: declares readOnlyHint: false |
| get_credits | no tags | |
| read_roll | no tags | |
| list_elements | no tags | |
| read_doc | no tags | |
| share_link | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| unshare | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| export | untrusted-input | untrusted-input: keyword "download" |
| list_space | no tags | |
| create_doc | external-sinkstate-write | external-sink: keyword "curl"; state-write: declares readOnlyHint: false |
| update_doc | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| pin | state-write | state-write: declares readOnlyHint: false |
| unpin | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| duplicate_doc | state-write | state-write: declares readOnlyHint: false |
| update_doc_info | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| save_reply_to_doc | state-write | state-write: declares readOnlyHint: false |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 1.0.0.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Nutcracker can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.