Skip to main content

Open Astrolabe to your tools

Some of your tools call Astrolabe by themselves: GitHub sends a webhook, a pipeline declares a deployment, an AI assistant reads the catalog. They are programs, not people: they never go through a sign-in page.

If a sign-in proxy protects your Astrolabe (Cloudflare Access, oauth2-proxy, your company's single sign-on), it must let these addresses through. This page lists them all, says why each one is called and what protects it, and shows how to open them.

⚙️ Why it matters​

A sign-in proxy answers a program the way it answers a person: with its sign-in page. Many proxies send that page with the status 200. The tool reads 200 and believes its call was delivered; Astrolabe never received it. Nothing breaks loudly: the event journal stays empty, the deployment never shows, the assistant never connects.

Opening these addresses opens nothing else. Each one checks its caller itself, with the secret, token or access listed below.

📋 The addresses​

Replace astrolabe.acme.example by the address of your Astrolabe.

Webhooks​

Each tool sends what just happened to the event journal and the notifications. Without its webhook, Astrolabe reads the tool every few minutes instead.

MethodAddressCalled byWhat protects itIf it is closed
POST/api/orion-events/githubGitHubThe webhook secret, in the header X-Hub-Signature-256Administration › Webhooks says No call received since Astrolabe started. while GitHub shows its deliveries as successful
POST/api/orion-events/gitlabGitLabThe webhook secret, in the header X-Gitlab-TokenSame, for GitLab
POST/api/orion-events/jiraJiraThe webhook secret, in the header X-Hub-SignatureSame, for Jira
POST/api/orion-events/argocdArgo CDThe webhook secret, in the header X-Argocd-TokenSame, for Argo CD
POST/api/orion-events/sonarqubeSonarQubeThe webhook secret, in the header X-Sonar-Webhook-HMAC-SHA256Same, for SonarQube
POST/api/orion-events/grafanaGrafanaThe webhook secret, in the header AuthorizationSame, for Grafana
POST/api/orion-events/azureAzure DevOpsThe webhook secret, in the header X-Azure-DevOps-Token or AuthorizationSame, for Azure DevOps

The secrets are set in Administration › Webhooks: Set the webhook secret.

Pipelines​

MethodAddressCalled byWhat protects itIf it is closed
POST/api/release-manager/pipeline/projects/{project}/environments/{environment}Your pipeline (GitHub Actions, GitLab CI, Jenkins…), at the end of a deploymentThe pipeline token, in the header Authorization: BearerThe pipeline receives an HTML page or a redirection instead of JSON; the version never shows in Deployments

The token is generated in Administration › Plugins › Deployments: Report deployments from your pipelines.

AI assistants​

Your users' assistant (Claude, Cursor…) connects to Astrolabe's MCP server. The user approves it once in the browser; the assistant then calls these addresses by itself.

MethodAddressCalled byWhat protects itIf it is closed
POST/api/mcp-actions/v1/astrolabeThe assistant, to read the catalog with the user's rightsThe access Astrolabe gave the assistant, in the header Authorization: BearerThe assistant cannot connect, or says the server does not answer
GET/.well-known/oauth-protected-resource/api/mcp-actions/v1/astrolabeThe assistant, to learn who gives access to the serverNothing to protect: a public description, no dataThe assistant never offers the approval
GET/.well-known/oauth-authorization-server/api/authThe assistant, to find where to ask for its accessNothing to protect: a public description, no dataThe assistant never offers the approval
GET/api/auth/.well-known/openid-configurationSome assistants, for the same descriptionNothing to protect: a public description, no dataThese assistants never offer the approval
POST/api/auth/v1/tokenThe assistant, to turn the user's approval into an access, then to renew itThe approval code or the renewal token Astrolabe gave itThe user approves the assistant, then it fails to connect; later, the connection drops when the access expires

The MCP server is off until an administrator turns it on: Turn on the MCP server.

Monitoring​

Only if your monitoring runs outside your network.

MethodAddressCalled byWhat protects itIf it is closed
GET/.backstage/health/v1/readinessYour monitoringNothing to protect: a status, no dataYour monitoring reads the proxy's answer instead: Astrolabe looks down, or always up

What stays behind your sign-in​

Everything else. People open Astrolabe in their browser, sign in to your proxy first, then to Astrolabe: the sign-in page, the approval of an assistant and every screen go through your proxy as usual. Do not open more than the addresses above.

🔧 Let them through​

With Cloudflare Access​

  1. In Cloudflare Zero Trust, open Access › Applications and click Add an application.

  2. Choose Self-hosted.

  3. Add one destination per line of this table, on the domain of your Astrolabe:

    Path
    api/orion-events
    api/release-manager/pipeline
    api/mcp-actions
    .well-known
    api/auth/.well-known
    api/auth/v1/token

    Add .backstage/health too if your monitoring is outside your network.

  4. Add a policy with the action Bypass, and include Everyone.

  5. Save the application.

Your application that protects the whole domain stays as it is: Cloudflare applies the most specific path first. This step was not checked on a live instance.

With oauth2-proxy​

Give it the addresses to skip, one --skip-auth-route per line:

--skip-auth-route='POST=^/api/orion-events/'
--skip-auth-route='POST=^/api/release-manager/pipeline/'
--skip-auth-route='^/api/mcp-actions/'
--skip-auth-route='GET=^/\.well-known/'
--skip-auth-route='GET=^/api/auth/\.well-known/'
--skip-auth-route='POST=^/api/auth/v1/token$'

Add --skip-auth-route='GET=^/\.backstage/health/' if your monitoring is outside your network. This step was not checked on a live instance.

✅ Check​

From a machine outside your network, without signing in to your proxy:

curl -s -X POST https://astrolabe.acme.example/api/orion-events/github

Astrolabe answers itself, in JSON:

{"error":{"name":"AuthenticationError","message":"Missing credentials"}, …}

The call is refused because it has no secret: that is expected, it reached Astrolabe. An HTML page, or a redirection to a sign-in page, means the proxy answered instead: go back to Let them through.

Then make a real call from the tool: push a commit, or click Redeliver on the last delivery of the webhook in GitHub. Administration › Webhooks now says Last call accepted followed by a date.

🆘 Common problems​

What you seeWhat to do
GitHub shows the deliveries as successful (200), and Administration › Webhooks says No call received since Astrolabe started.Open the last delivery in GitHub (Settings › Webhooks › Recent Deliveries) and read the Response body. A sign-in page (for example Sign in ・ Cloudflare Access) means your proxy answered: let the address through.
The pipeline's call answers with HTML, or follows a redirectionSame cause: let the pipeline address through, in the Pipelines table.
The assistant opens the approval page, you approve, then the assistant says it cannot connectAn address of the AI assistants table is closed in your proxy: open them all.
The curl of Check answers {"error":{"name":"AuthenticationError","message":"Missing credentials"}, …} but Administration › Webhooks says the source signs with another secretThe address is open; the secret differs. See Common problems with webhooks.
Still stuck?

Write to support@forgeit.fr with the address the tool calls and the response body it shows.