Documentation
Hosted MCP setup
The hosted EpiDev MCP server is provisioned from the customer portal and reachable over HTTPS, so assistants that can only talk to a remote MCP server — ChatGPT, and Claude on the web and desktop — can use EpiDev tools without a VS Code window open. Claude Code connects to the same endpoint. This page covers seats, provisioning, policy, each client, and how to take access away again.
How hosted MCP works
A hosted server belongs to one organization. It holds the ERP environments you register with it, enforces the same mode and agent-write policy the extension enforces, and presents EpiDev's tools to any MCP client you authorize. People reach it with named seats, not with a shared key.
How clients authorize
Clients sign in with the OAuth 2.0 authorization code flow with PKCE. The server also supports dynamic client registration, so a client registers itself the first time you add it: there is no client ID or secret for you to create, and nothing of the kind to paste into a chat window. The sign-in is where your seat is checked, which is why the seat has to exist first.
The order of the work
- Assign the named seats people will use — see Seats and pricing.
- Provision the server and copy its endpoint — see Provision in the portal.
- Register at least one ERP environment — see Add an ERP environment.
- Set the mode and agent-write policy for each environment — see Policy and permissions.
- Connect each client and complete its sign-in.
- Prove it works with a read that cannot change anything — see Test a safe read.
127.0.0.1, connected with
EpiDev: Connect Agent Clients. That is a different setup with different
trade-offs, and it is covered in Use AI agents. The two
can coexist; they do not share configuration.
Seats and pricing
Hosted access is per named person. Each person who will use an assistant against your ERP needs a seat of one of two types, assigned to them in the portal.
| Seat | Price | What the seat allows |
|---|---|---|
| Read-write | $30 / user / month | Everything a read-only seat can do, plus the tools that preview and apply changes — still subject to the environment's mode, its agent-write policy, any per-domain overrides, and the ERP user's own permissions. |
| Read-only | $5 / user / month | Listing, reading, inspecting, analyzing, comparing, and diagnosing. Mutating tools are not offered to the client at all, and a mutating call is refused if one is attempted. |
readonly or
live environment, a read-write seat still sees only read tools, and
agentWrites still applies on a writable one. If most of your
team only needs to look things up, read-only seats are the cheaper and safer default.
Seat type and seat count are managed in the portal. The server license is $120 per server per month, a separate line on your bill and is not changed by how many seats you assign or which type they are. EpiDev extension plans are priced separately again — see Get EpiDev.
Provision in the portal
Provisioning and seat assignment are owner and admin actions. Everything in this section happens at portal.epidev.ai; nothing here is configured from a chat client.
- Sign in to the portal. Use an account that owns or administers the organization. A member account can hold a seat but cannot provision a server or assign seats.
- Provision the hosted MCP server. Open MCP Server > Servers, select Create hosted server, enter a name, and wait for Ready. One server serves the whole organization; you do not need one per person or per client.
- Assign named seats. Open Seats, add each person who will connect an assistant, and choose read-write or read-only for them. Do this before they touch a client — see Seats and pricing.
- Copy the server endpoint. The portal shows the complete HTTPS URL for your server. Copy it with the portal's own copy control rather than retyping it: it is the exact value ChatGPT, Claude, and Claude Code each need, and it already carries the MCP path those clients expect.
Add an ERP environment
An environment is one ERP instance plus the policy that governs it. A hosted server with no environment registered has nothing to read, so add at least one before you connect a client. You can register several and let callers choose.
| Field | What to enter |
|---|---|
| Name | A unique key for this environment. It appears in tool parameters, results, and audit entries, so pick something a person can recognize in a chat transcript. |
| Base URL | The instance root, for example https://host/Instance. REST paths are built from this value plus /api/v2/…. |
| Company | Default ERP company segment for REST v2 OData and RPC calls. |
| Authentication | Either an ERP user with its password and x-api-key, or the tenant's SSO configuration. Whatever you choose, the ERP side decides what that identity may touch. |
| Mode | readonly, writable, or live. Start at readonly and move an environment only when you mean to. |
| Agent writes | deny, confirm, or allow — the policy applied to AI clients specifically, on top of the mode. |
| Domain overrides | Optional per-domain narrowing, for example keeping AppStudio read-only inside an otherwise writable environment. |
Finish with the portal's connection test. A passing test confirms the instance answered, which identity it resolved, and the live server version. If it fails, re-check the base URL shape, the company, and the stored credentials before changing anything else.
Policy and permissions
Five independent things decide whether a given call is allowed. They narrow, they never widen: the most restrictive one wins, and no setting inside a chat client can loosen any of them.
| Gate | What it decides |
|---|---|
| Seat type | Whether mutating tools are offered to this person at all. A read-only seat never sees them. |
| Environment mode | readonly and live are read-only for everyone, humans and agents alike. writable is the only mode in which anything is written. |
| Agent-write policy | On a writable environment, whether an AI client's write is denied outright, requires an explicit confirmation, or proceeds through the normal gate and audit path. |
| Per-domain overrides | Narrows single domains below the environment's own setting, and only downward. |
| ERP permissions | The final word. The ERP identity the environment authenticates as still governs what the instance will return or accept, exactly as it would for that user signing in directly. |
live does not mean "writes allowed on the live system". It
is the strictest level: read-only everywhere, with agent writes forced off. If you
intend to write, the environment must be writable. The same distinction is
explained in more detail under Safety modes.
Granting someone a read-write seat is therefore a decision about that person, not about your environments. Deciding which environments can be written at all is a separate decision you make per environment, and it is the one that protects production.
Connect ChatGPT
ChatGPT adds a remote MCP server as a plugin. You need your seat assigned and your server endpoint copied before you start.
- Open ChatGPT Plugins. Go to chatgpt.com/plugins.
- Select the plus button, then Add custom MCP server.
- Enter a name and description. These are user-facing, and they are what you will recognize later when selecting the plugin in a conversation. EpiDev plus a line naming the ERP environments it reaches is plenty.
-
Paste your server endpoint as the MCP server URL.
Use the public HTTPS endpoint you copied from the portal, including its
/mcppath. If you shortened or re-typed it, go back and copy it again. - Configure authentication and acknowledge the risk warning. Read the warning, then select I understand and want to continue. EpiDev's server advertises its own OAuth configuration, so there is no client ID or secret to supply here.
- Select Create as a plugin, then review the tools. ChatGPT shows the tools and metadata it discovered from your server. This is a good moment to confirm the surface matches your seat: a read-only seat should show no mutating tools.
-
Install it, then use it with
@. Open a new conversation, type@in the prompt box, and select the plugin. You will be sent to EpiDev to sign in and approve access the first time it is used; that sign-in is where your seat is checked.
Connect Claude web & desktop
Claude calls a remote MCP server a custom connector. The steps are the same on the web and in the desktop app.
- Open Customize > Connectors.
- Click + Add, then Add custom connector.
- Enter a connector name. EpiDev is the obvious one; if you run more than one server, name the organization or environment group it reaches.
- Paste your server endpoint and click Continue. Use the exact URL copied from the portal.
- Review the authentication settings and click Continue. Under Authentication, choose Sign in now so you find out immediately whether your seat is in place, rather than at the moment you first need a tool.
- Under OAuth client, choose Register automatically. This lets Claude register its own client with your server through dynamic client registration.
- Leave Request headers empty. EpiDev authorization travels through the OAuth sign-in. Fixed header credentials are for servers that work differently, and ERP credentials never belong here.
- Click Add and complete the sign-in. Approve the access request on EpiDev's page. The connector then appears in your connector list and its tools become available in chat.
Connect Claude Code
Claude Code reaches the same endpoint over HTTP transport, added from the command line. Replace <copied-endpoint> with the exact URL from the portal:
claude mcp add --transport http epidev <copied-endpoint>
Then start Claude Code in that project and run:
/mcp
/mcp lists the configured servers, starts the browser sign-in for
epidev if you have not authorized yet, and shows the tools once the server
is connected. Use it again later to re-authenticate if a session expires.
--scope user to
the claude mcp add command instead if you want it available in every
project on your machine.
Test a safe read
Prove the connection with calls that cannot change anything, against a
readonly environment. In order, these answer "am I authorized, to what,
with which permissions" before anything else is attempted:
epi_environments— confirms the sign-in worked and lists each environment, its effective mode, and its agent-write policy. It never returns secrets.epi_tool_catalog— shows exactly which tools your seat and the active environment expose. On a read-only seat, mutating tools are absent from this list.epi_list_artifacts— compact rows for one domain, narrowed by a search term.epi_get_artifact— the content of a single artifact.
A prompt that walks the whole sequence:
Use EpiDev to list my environments with their modes, then list five BPM directives from the read-only one and summarize what they do. Do not change anything.
Expect the client to ask for your approval the first time it uses the connector, and expect the results to name the environment they came from. If the environment is named and the modes look right, the connection is good.
readonly or live environment
sees read tools only, and that is the system working as designed. Check the environment
before you suspect the seat — see Policy and permissions.
Troubleshooting
Most first-connection problems are one of these, and most of them are fixed in the portal rather than in the client.
| Symptom | What to do |
|---|---|
| Sign-in is refused, or it completes but no tools appear | The most common cause is a missing seat, or a seat assigned after the client was added. Assign the seat in the portal, then remove and re-add the connector so it authorizes again. |
| Claude's sign-in fails after choosing the recommended OAuth option | The published-identity option is not supported by EpiDev's server. Remove the connector, add it again, and under OAuth client choose Register automatically. |
| ChatGPT cannot connect to the URL | Confirm you pasted the portal endpoint exactly, over HTTPS and including its /mcp path. OpenAI's documentation suggests verifying the endpoint with MCP Inspector before changing anything else. |
| The option to add a custom MCP server or connector is not there | This is a plan or policy limit, not an EpiDev one. In ChatGPT, account and workspace policy governs custom MCP servers. In Claude Team and Enterprise, an owner must add the connector under Organization settings > Connectors before members can connect it. |
| A read-write seat sees no write tools | Check the environment, in this order: its mode is readonly or live; a per-domain override narrows the domain you are working in; or its agent-write policy is deny. All three are portal settings, and all three outrank the seat. |
| It worked before and now asks you to sign in repeatedly | The authorization expired or was revoked. In Claude Code run /mcp and sign in again; in Claude or ChatGPT, reconnect the connector. If it is refused, check whether the seat is still assigned. |
| Results come back from the wrong environment | More than one environment is registered and the call used the active one. Name the environment explicitly in your request, so the assistant selects the intended ERP instance. |
If none of these fit, note which client you used, which environment, and what the error said, and send it to support@epidev.ai. Do not include ERP credentials or customer data in the report.
Revoke access
There are three levers, and they are independent. Choose by how much you need to stop.
Disconnect one client
Stops that one assistant and leaves the person's other clients and their seat alone. In Claude, remove the connector under Customize > Connectors. In ChatGPT, remove the plugin. In Claude Code:
claude mcp remove epidev
Unassign the seat
Stops one person across every client they have connected, including ones you do not know about. Do this in the portal. It is the correct action when someone leaves, changes role, or no longer needs ERP access.
Revoke at the server
Use Unlink server in the portal to revoke that server and end its client access.