When a tool fails, ics-mcp returns a structured error: a stable code, a message, and often a
hint with the fix, the HTTP status from ICS, the field at fault, or extra data (for
example the allowed values). The assistant usually reads the hint and corrects itself. This page
explains the codes you are most likely to see and what you can do about them.
Codes that come from ICS itself are passed through unchanged; the complete list is in the ICS
API error reference.
No valid sign-in: the tokens were deleted, revoked or expired and could not be renewed, or ics-mcp runs where it cannot open a browser. With the latter, the error carries an authorization_url.
On a desktop, call a tool again and finish the sign-in in the browser. If it keeps coming back, delete the keyring entry (Sign out) and sign in again. On a machine without a browser, see Sign in on a machine without a browser.
auth_required (remote server)
Your client sent no token, or ICS rejected it.
Reconnect the connector in your client so it signs in again.
auth_timeout
The sign-in was not finished in the browser within 5 minutes.
Ask again; a new sign-in starts.
auth_denied
You chose Cancel on the consent page, or ICS refused the request.
Ask again and choose Allow if you meant to connect.
state_mismatch
The browser came back with a different sign-in attempt than the one ics-mcp was waiting for.
Ask again, and finish only the newest sign-in tab.
token_exchange_failed
ICS refused to issue tokens after the consent; the error's data holds the reason ICS gave.
Try again. If it keeps failing, check that ICS_MCP_RESOURCE_URI and ICS_MCP_OAUTH_CLIENT_ID match the ICS setup.
The browser shows invalid_target
The resource (your ICS_MCP_RESOURCE_URI) is missing or not allowed by ICS.
Copy the exact value from your ICS administrator, including the scheme and path.
The browser shows unauthorized_client
ICS does not know the client ics-mcp signs in as (ics-mcp-stdio by default). ICS registers it only when MCP is enabled there.
Ask your ICS administrator to enable MCP (set ICS_MCP_RESOURCE_URI on the ICS side).
The browser shows a 403 page with "bad host" or "bad origin" after you allow
The sign-in redirect to 127.0.0.1 did not come straight from your browser, usually because a proxy or VPN intercepts local traffic.
Exclude 127.0.0.1 from the proxy or VPN and try again.
The browser never opens
ics-mcp could not start a browser.
Check the MCP logs of your client (see Read the server logs); after 5 minutes the tool returns auth_timeout.
Note
Refresh tokens change on every use, and ICS treats reuse of an old one as a theft attempt: it
revokes the whole chain of tokens. After that you simply sign in again. You will not see this
during normal use; it can happen if you copy keyring entries between machines.
Check ICS_BASE_URL (with https://), that ICS is up, and your network, VPN, DNS or firewall.
rate_limited
ICS kept answering "too many requests" after three automatic retries.
Wait a little. For big jobs, ask the assistant to filter on the ICS side and page through results, and to replace many files in one new version instead of one call per file.
server_error, ics_error
ICS failed. Reads are retried automatically on gateway errors; writes are not, because ICS may have applied them.
Check whether the change happened (for example with ics_asset_versions) before you ask again.
unexpected_response, internal_error
ICS answered in a shape ics-mcp did not expect, or ics-mcp hit a bug.
Often a version mismatch between ICS and ics-mcp. Update ics-mcp; if it persists, report it with the server log.
A gated operation was not confirmed. Either your client cannot show confirmation questions while the mode is interactive, or the call passed confirm=false.
The document does not exist, was deleted, or you cannot see it. For relations and graph tools it also means you have no graph access (a viewer share or a share link gives none).
Check the slug, for example by searching. Ask the owner for access if needed.
invalid_argument
An argument is wrong. field names it; for a fixed list of values, data.allowed lists them.
The assistant usually fixes this itself.
file_too_large
A file over 2000 lines was read without a line range.
Read it in parts (lines) or by section (outline, then anchor).
line_range_too_wide
The requested range is longer than allowed in one call.
Split the range.
anchor_not_found
The heading anchor does not exist in the current version. The hint lists the known anchors.
Pick one from the hint or from ics_asset_outline.
outline_building
ICS is still building the outline of a new version.
Read the file directly, or try again in a few seconds.
binary_file
An image, font or other binary file was read as text.
Usually not needed; if it is, read it with encoding="base64" (up to 1 MB).
id_required
ics_asset_undelete got a slug. Deleted documents can be restored only by their UUID.
Use the id from an earlier response (for example from ics_assets_list with detail="full" before the deletion).
ics-mcp writes its logs to standard error, never with tokens. Your MCP client shows them: in Claude
Desktop under Settings, Developer, Open MCP Logs. For more detail set ICS_MCP_LOG_LEVEL=DEBUG in
the env block and restart the client. To try tools by hand, the
project README shows how to run ics-mcp in the MCP Inspector.