ConfigurationMCP servers

Connect a hosted server

Bind GitHub's MCP server with a token, Linear's with an OAuth sign-in, and a vendor's hosted endpoint for a server your repository starts with Docker.

Overview

A hosted server is a server that your repository declares by URL, such as GitHub's or Linear's. Agents reach it through SHIP. SHIP attaches the credential to each request and sends the credential only to that URL. This guide binds three servers from this .mcp.json:

{
  "mcpServers": {
    "github": { "type": "http", "url": "https://api.githubcopilot.com/mcp/" },
    "linear": { "type": "http", "url": "https://mcp.linear.app/mcp" },
    "postgres": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "-e", "DATABASE_URL", "mcp/postgres"]
    }
  }
}

To bind servers, you must be an owner or admin of the organization. Members see the same pages, but without the controls. Each CLI command below takes --project <id>, or reads SHIP_PROJECT_ID.

Bind GitHub's server with a token

GitHub's MCP server takes a personal access token as a bearer header. Create a fine-grained token that has only the repositories and permissions that your agents need. Read access to issues, pull requests and code is enough to plan and verify.

Bind it for the agents that need it

Open the project. Select Bind on the github card. Tick the agents. Add an Authorization header with the value Bearer followed by your token. Select Save binding to store the header encrypted. SHIP never shows it again.

The binding dialog for the github server, with the planner, builder and QA agents ticked and a stored Authorization header.
The credential is only ever sent to the URL shown, and the dialog never shows its value again.

Approve the tools agents may call

SHIP lists the server's tools when you bind it. Approve the tools that your agents need. The others stay hidden. The Reviewer and the QA agent receive only the tools that the server marks read-only, and each unannotated tool that you attest as read-only.

ship mcp tools github --approve get_issue,list_pull_requests,search_code,get_file_contents --attest get_file_contents
[x] get_issue  read-only
[x] list_pull_requests  read-only
[x] search_code  read-only
[x] get_file_contents  unannotated, attested read-only
4 of 7 approved - planner 4 tools, builder 4 tools, qa 4 tools

In the console, make the same choice in the Tools dialog on the server's card.

Refresh when the server changes

If the server adds a tool later, no agent gets it until you approve it. To see the new tool, refresh the list:

ship mcp tools github --refresh
[x] get_issue  read-only
[x] list_pull_requests  read-only
[x] search_code  read-only
[x] get_file_contents  unannotated, attested read-only
[ ] create_pull_request  writes
[ ] add_issue_comment  unannotated
[ ] merge_pull_request  writes, destructive
[ ] list_workflow_runs  read-only
4 of 8 approved - planner 4 tools, builder 4 tools, qa 4 tools

Sign in to Linear's server with OAuth

Linear's MCP server uses an OAuth sign-in, not a token. SHIP registers itself with the provider, runs the sign-in, and then renews the authorization. The agents never receive the token, and they never start a sign-in of their own.

Bind it without a credential

ship mcp bind linear --roles planner,builder

The card then reads Needs credential: the server answered that it needs an authorization.

Connect your account

Select Connect on the linear card. Approve the access that Linear asks for. You then return to the project page, which shows that the server is signed in.

Approve its tools

After the sign-in, SHIP can list the server's tools. Approve them as you did for GitHub: use Tools on the card, or run ship mcp tools linear --refresh and then --approve.

Linear can later refuse the stored authorization, for example if someone revokes the app. The card then reads Reconnect needed. Each agent that should get the server stops with that reason before it starts. To sign in again, select Reconnect.

A server card reading Reconnect needed, with the provider's reason: the authorization server refused the stored refresh token.
A revoked sign-in says so on the card, with the provider's own reason.

Point a Docker server at its hosted endpoint

The sandbox has no container runtime, so a server that your repository starts with docker run can't run there. Instead, bind the vendor's hosted endpoint under the same name, with a header credential:

The Bind dialog for a Docker server offers only the hosted endpoint, and asks for its URL.

The binding dialog for a server started with Docker: the vendor's hosted endpoint is the only way it can run, with a URL field and an Authorization header.

The URL must be https. SHIP pins the credential to that URL, so the repository's file can't send it to a different URL later.

Let your coding agent bind them

Your own coding agent can do all of this through the MCP server, with these tools:

  • list_mcp_servers shows what the repository declares and what is bound.
  • bind_mcp_server binds a server or edits its binding.
  • refresh_mcp_server_tools lists the tools of a server.
  • start_mcp_server_oauth returns the sign-in link for you to open.

The tools take the same fields as the API.

How is this page?

On this page