RE:NODE

Connect Claude to your game server or app with MCP

By RE:NODE Team
15 min read


To connect Claude to a RE:NODE server, you add one URL - https://panel.renode.space/api/client/mcp - as a remote MCP server, then approve the connection once in your browser. In Claude Code that is a single claude mcp add command; in Claude.ai it is a custom connector with the same address. Nothing is installed on your machine or on the server. On the consent page you choose which servers the assistant may reach and at which level: Files (read and edit files, read the console) or Manage (the same, plus start, stop, restart and console commands). Databases, backups, schedules, users, startup settings and passwords stay out of reach whatever you pick.

If you only want help with one server for one conversation, there is a shorter path: the Connect AI button above the console makes a share link you paste into the chat. Both routes are covered below, along with what the assistant actually sees, what is withheld, and what to do when the connection does not come up. None of this is specific to games - a Valheim server, a Discord bot and a Next.js app look the same to the assistant.

What MCP is, in one paragraph#

The Model Context Protocol is the standard way for an AI assistant to call tools that live somewhere else. An MCP server publishes a list of tools with names and arguments - read_file, tail_console, power - and the assistant decides when to call them, reads the result and carries on. A remote MCP server is one reached over HTTPS rather than started as a local program. Ours speaks Streamable HTTP, which is what current Claude clients expect for a remote server, so there is no package to install, no Node.js or Python runtime on your machine, and nothing to keep updated.

The practical difference from pasting logs into a chat is that the assistant stops guessing. Instead of you copying the last 40 lines of console output and describing your folder layout, it lists the directory itself, reads server.properties or package.json, tails the console and tells you what it found. With the Manage level it can then restart the server and watch it come back.

There are two doors, and they suit different jobs.

RouteBest forLifetime
MCP endpoint + OAuthOngoing work across your serversStays connected while used
Share link (Connect AI)One server, one conversation7 days idle (read), 24 hours idle (control)

The MCP endpoint with OAuth is the one to set up if you use Claude regularly. You connect once, choose your servers and a level, and the assistant keeps its own access alive: access tokens last an hour and are refreshed in the background, and the refresh token slides forward 30 days with every use. An assistant you open once a month never asks you to sign in again. It also gets the list_servers tool, so you can say "the Minecraft one" instead of pasting an ID.

A share link is scoped to a single server and is something you hand over, not something you sign into. It works in any assistant that can open a URL - Claude, ChatGPT or anything else - because at its simplest it is a page of markdown describing the server. A link created for the Manage this server purpose can also act, and it has its own MCP address you can add to Claude as a connector.

If you are unsure, start with OAuth in whichever Claude client you use most. Use share links for a quick one-off, or for an assistant that does not support remote MCP at all.

Connect Claude Code#

Claude Code is the command-line agent, and it is the quickest to set up. From any terminal:

bash
$ claude mcp add --transport http renode https://panel.renode.space/api/client/mcp

renode is just the name the server will have inside Claude Code - call it what you like. The command registers the server; it does not sign you in yet. Start Claude Code and run /mcp. The renode entry will show that it needs authentication; pick it, and Claude Code opens your browser at the panel's consent page.

  1. If you are not signed in to the panel, you are sent to log in first (with your two-factor code if you have one) and then straight back to the consent page.
  2. Check the host the approval goes back to. For Claude Code this is a localhost address, and the page warns you about that - expected for a CLI, since the browser hands the code back to the program on your own machine.
  3. Choose All my servers or pick specific ones.
  4. Choose a level: Files or Manage.
  5. Approve. The browser tab can be closed; Claude Code now has the tools.

Back in Claude Code, ask something that forces a tool call: "List my RE:NODE servers and tell me which ones are running." If it answers with your actual server names, the connection works.

A few Claude Code details worth knowing:

  • By default claude mcp add registers the server for the current project only. Add --scope user to make it available in every project on your machine, or --scope project to write it into a .mcp.json file in the repository so teammates get the same entry (each still signs in as themselves).
  • claude mcp list shows what is registered and whether each server connects. claude mcp remove renode removes the entry on your side.
  • Removing the entry does not revoke the grant on the panel. To end access properly, disconnect it from the panel as well - see the section on revoking below.

Using an API key instead

If you already use a client API key for scripts, it still works and skips the browser:

bash
$ claude mcp add --transport http renode https://panel.renode.space/api/client/mcp \    --header "Authorization: Bearer ptlc_your_key_here"

This is the less tidy option. The key has the full reach of your account's client API, it never expires on its own, and it sits in plain text in Claude Code's config. Any allowed-IP list on the key and two-factor enforcement still apply, as they do to every client API call. Prefer OAuth unless you have a reason - for example a headless machine with no browser to approve from.

Connect Claude.ai and Claude Desktop#

In Claude.ai the same endpoint is added as a custom connector. The exact menu wording moves around as Anthropic updates the app, but the path is Settings, then Connectors, then the option to add a custom connector.

  1. Give it a name, such as RE:NODE.
  2. Paste https://panel.renode.space/api/client/mcp as the URL. Leave any OAuth client ID and secret fields empty - the panel supports dynamic registration, so Claude registers itself.
  3. Save, then press Connect. A browser window opens at the panel's consent page.
  4. Choose your servers and a level, and approve.

The consent page shows the name of the app asking for access and the host the approval returns to. For Claude.ai that should be an Anthropic address, not something you do not recognise. If the page says the client's name is "checked by nothing", that is accurate: anyone can register a client and call it anything, which is exactly why the page shows the return host as well. Read it before you approve.

Once connected, enable the connector in a conversation (from the tools menu under the message box) and ask Claude to list your servers.

Claude Desktop uses the connectors on your Claude account, so a connector added in Claude.ai should appear there too. Whether custom connectors are available to you at all depends on your Claude plan - Anthropic's help pages are the place to check that, not us. We have built and tested the endpoint against Claude Code and Claude.ai custom connectors. It follows the MCP specification, so other clients that support remote MCP with OAuth should work, but we have not tested ChatGPT or Cursor against it and make no promises there.

The Connect AI bar on the console#

On every server's Console tab, above the terminal, there is a bar titled Work on this server with AI. It also appears on the Startup tab. It is visible to anyone who can read the server's startup settings, which covers the owner and most subusers.

It has one dropdown, What the assistant is for, and one button, Connect AI. The purposes are:

PurposeWhat you get
GeneralA read link to understand the server
Set up a new projectA read link with setup instructions
Fix my repositoryA read link focused on the repo
Server won't startA prompt with the console tail, no link
Connect a databaseA read link with database steps
Add a domainA read link with domain steps
Manage this serverA control link that can act

Press Connect AI and the panel makes a link of the form https://panel.renode.space/ai/rnai_... and copies it to your clipboard. It is shown only this once - the panel keeps a hash, not the link - so paste it somewhere before you close the dialog. Paste it into the chat with a sentence about what you want, and the assistant opens it and gets a markdown description of the server: runtime, start command, boot order, the server's address and port, pre-flight findings from the repository if one is linked, and the instructions for the purpose you chose.

Server won't start is the exception. It copies a ready-to-paste prompt containing the latest console output instead of a link, because the useful thing in a crash is the last screen of log, and it should not wait for the assistant to fetch anything. Use it from the Console tab so the console lines are included. If the crash is a loop rather than a one-off, our guide to crash loops covers what the output usually means.

A Manage this server link shows a second address, the MCP server URL, ending in /mcp. Paste that into Claude.ai as a custom connector, or add it in Claude Code:

bash
$ claude mcp add --transport http renode-link https://panel.renode.space/ai/rnai_xxx/mcp

No sign-in happens here - the link itself is the credential. That is the point of it, and also the reason it is built to die quickly.

What the assistant can see and do#

Through the MCP endpoint the assistant has these tools. Which ones work depends on the level you approved and on your own permissions on that server, both checked on every call.

ToolWhat it doesLevel
list_serversYour servers covered by the grantFiles
get_server_contextRuntime, startup, address, notesFiles
get_resourcesLive memory, CPU and disk useFiles
get_setup_promptTask instructions for this serverFiles
tail_consoleRecent console outputFiles
list_filesDirectory listingsFiles
read_fileFile contents, secrets redactedFiles
write_fileCreate or overwrite a text fileFiles
set_envSet keys in a .env without reading itFiles
send_commandType a command into the consoleManage
powerStart, stop, restart or killManage

A few behaviours are worth knowing before you rely on them:

  • tail_console returns at most the last 100 lines, because that is what the server daemon keeps in its buffer. For an older error, have the assistant read the log file instead - logs/latest.log on Minecraft, for example.
  • write_file writes UTF-8 text up to 1 MB. It will not write anywhere under .git/, because .git/hooks is code that runs on the next fetch.
  • Tools are always listed, even ones your level does not allow. A refused call comes back as a readable error the assistant can understand, so a Files-level connection asked to restart will tell you it cannot rather than fail silently.
  • Power actions, console commands and file writes are recorded in the server's activity log under your account, marked as coming through OAuth with the client's name, or through a link. A restart made by the assistant counts as a deliberate restart, not a crash.

On a share link the set is narrower. A read link gets the context, the task prompts, resource use, the console tail and directory listings - but no file contents, because a read link stays valid for a week of idleness and tends to be pasted into chat history, and a .env is where secrets live. A control link adds file reads and writes, console commands and power actions. list_servers is never available through a link: a link knows exactly one server.

What stays out of reach#

Some things no level and no link can reach. Through the MCP endpoint, never: databases or their passwords, backups, schedules, subusers, startup command and variables, server settings. Through a link, never: deleting or renaming files, reinstalling, startup or variable changes, databases, backups, schedules, users, SFTP details or API keys.

Secrets get separate treatment. Every byte that leaves through these tools - context, console, file contents - passes a redactor that works in three layers:

  1. By name. Any variable called something like TOKEN, PASSWORD, KEY, SECRET, AUTH or SALT has its value withheld.
  2. By shape. Strings that look like GitHub, Slack, OpenAI or AWS keys, JWTs, passwords inside URLs, or long random-looking strings are withheld whatever they are called.
  3. By value. The server's actual secret values and its database passwords are collected and scrubbed from the finished output, which catches a password pasted into a variable named NOTES.

That redaction is also why set_env exists. If the assistant read a .env file and wrote it back, every password would come back as a placeholder and your app would break. set_env instead replaces or appends the named keys on the panel side, keeps every other byte of the file, and returns only key names. You can tell Claude "set DATABASE_URL in .env to this value" and nothing in the response echoes it. It works only on files named .env or starting with .env. More on keeping secrets in the right place in environment variables and secrets.

Limits, expiry and revoking access#

OAuth connections and share links age differently.

  • OAuth: access tokens last 1 hour and are refreshed automatically. Refresh tokens last 30 days and slide forward with each refresh. If a spent token is ever presented again - a sign it was copied - the whole grant is revoked and you will need to approve again.
  • Read links: each use extends the link to 7 days idle, up to 90 days from creation.
  • Control links: each use extends the link to 24 hours idle, up to 30 days from creation.
  • A server has at most five active links, two of them control links. Making a new link for the same purpose replaces your previous one.
  • Each link allows 60 requests a minute, 20 actions a minute and 6 power actions a minute.
  • A link stops working the moment its creator loses access to the server. An expired, revoked or refused link answers with a plain 404, so it reveals nothing about whether it ever existed.

To end access sooner, go to Account, then Connected AI in the panel. It lists every OAuth connection with Disconnect and every active share link you made, on any server, with Revoke. This is the place to clean up after a laptop goes missing or a teammate leaves - and teammates are better handled as subusers with narrow permissions anyway, as subusers and least privilege explains. Note that "All my servers" on the consent page means servers you own plus servers where you are a current subuser, and your subuser permissions cap what the assistant can do there.

A worked example: a server that stops on boot#

Here is what a typical session looks like with Claude Code connected at the Manage level, on a Node.js app that crashes after an update. The prompt:

code
My RE:NODE server "shop-api" stopped starting after this morning's deploy.Find out why, fix it, restart it and confirm it stays up.

The assistant calls list_servers to resolve "shop-api" to an ID, then get_server_context to learn the runtime, start command and port. It calls tail_console and sees the app binding port 3000 when the server's port is something else. It calls read_file on package.json and the entry file, finds the hard-coded port, and uses write_file to read process.env.PORT instead, binding 0.0.0.0 rather than localhost. It restarts with power, tails the console again, and reports what it changed.

Every step is visible in the conversation, and every write and restart lands in the server's activity log. Read the diff before you accept it - the habits in AI coding agents for server work apply here exactly as they do on any machine. The same flow works for a game: "the Valheim server shows in the list but nobody can join" leads the assistant through the console, the start parameters it can read, and the world files, though it cannot change the startup variables itself and will tell you which value to change on the Startup tab.

Troubleshooting the connection#

The browser never opens in Claude Code. Run /mcp, select the server and choose to authenticate. On a remote machine with no browser, copy the URL Claude Code prints into a browser on your own computer; the redirect back to localhost will only complete on the machine running Claude Code, so for a headless box an API key is simpler.

The consent page shows an error instead of the approval form. The panel shows errors on the page rather than redirecting until it has verified the client and its return address. Remove the connector and add it again so the client registers fresh.

Claude says the tools exist but every call fails. Check the level. A Files grant refuses power and send_command. Then check your own permissions: on a server where you are a subuser without console access, the assistant has none either.

A share link returns 404. It expired, was replaced by a newer link for the same purpose, was revoked, or you lost access to the server. Make a new one from the console bar.

The assistant sees a placeholder where it expected a value. That is the redactor working. If it needs to change a secret, ask it to use set_env; if it needs the value, it does not.

Two-factor prompts during sign-in. Expected. The consent page sits behind the same two-factor check as the rest of the panel - see two-factor on your panel account.

FAQ#

Does RE:NODE run an AI model or see my conversations?

No. We run no model. The MCP endpoint and share links are doors for your own assistant; Claude runs on Anthropic's side under your Claude account, and the panel only sees the tool calls it makes, which are logged against your servers.

Can Claude delete my world or my files?

Not through these tools. There is no delete tool on the MCP endpoint, and links refuse delete and rename outright. It can overwrite a file with write_file at either level, so keep a recent backup before a session that edits configs.

Can I connect Claude to only one server?

Yes. Pick that server on the consent page instead of All my servers, or use a share link from that server's Console tab, which can only ever reach the one server.

Does it work with ChatGPT or Cursor?

A share link works in ChatGPT, since it is a URL. The MCP endpoint and OAuth are built and tested against Claude; other clients that support remote MCP should work, but we have not verified ChatGPT or Cursor against them.

What happens if I stop using it for a while?

An OAuth connection survives up to 30 days without use; after that Claude asks you to approve again. A read link lapses after 7 idle days and a control link after 24 idle hours, with nothing for you to clean up.

Was this helpful?