Gagarin Cloud
cloud.gagarin由 gagarin.cloud 發布官方發布者v0.3.0更新於 Nov 4, 2026
Your agent ships the app. Alerts, logs, project memory and approval-gated deletes come with it.
概覽
Gagarin Cloud 的遠端 MCP 伺服器,讓助理部署應用程式、開通後端服務、查看日誌與告警,並維護專案記憶。
- 可以做什麼
- 在可存取的 HTTPS 位址上部署與回復應用程式,查看狀態與版本
- 開通並連接 Postgres、Qdrant、Valkey、佇列、儲存桶等後端服務,並設定服務之間的存取關係
- 讀取專案的告警、日誌與備份
- 儲存、搜尋、更新、關聯與檢視專案記憶中的長期事實與決策
- 提交執行任務並輪詢其狀態;刪除操作需人工以電子郵件核准
- 適用情境
- 適合讓編碼助理在對話中直接交付並維運 Gagarin 平台上的應用程式:部署已在映像檔倉庫中的映像、加入資料庫或佇列、查看日誌與告警,或透過專案記憶在多次工作階段間保留決策。
- 執行需求
- 遠端 streamable HTTP 端點;透過 GitHub 或 Google 的 OAuth 登入,或在 Authorization 標頭提供 Gagarin CLI 產生的 bearer 憑證。需要 Gagarin 帳號與專案。此處無法建置與推送映像檔,需在裝有 docker 與原始碼的機器上用 CLI 完成。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Gagarin Cloud,將其新增到工作區。
- 連接 所需的 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
- 為需要使用其工具的對話啟用該服務。
Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。
交給代理程式安裝
把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。
閱讀 https://sourceweft.com/mcp/cloud.gagarin%2Fgagarin/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。其他 MCP 客戶端
把它新增到你客戶端的 mcpServers 設定中。 客戶端會在首次連接時完成 OAuth 登入。
{
"mcpServers": {
"gagarin-cloud": {
"type": "http",
"url": "https://mcp.gagarin.cloud/mcp"
}
}
}README
mcp
mcp.gagarin.cloud — deploy with ease, maintain without fear.
Add one URL to your agent and it can run your app at a live HTTPS address, give
it Postgres, Qdrant, Valkey, a queue or a bucket, wire what may reach what, and
roll back. Alerts, logs, backups and project memory come with it, and nothing is
deleted without your approval by email. It is Gagarin's API, as tools: 51 of
them, every one annotated so a client knows which to ask you about first.
Building and pushing an image needs docker and the source, so that one step is
gg ship on the machine that has them; everything after it is here.
The Model Context Protocol is how an agent finds and calls a tool it was not built with. This is Gagarin's, and it exists so that adding Gagarin to a coding agent is a URL rather than an install — the one artefact that makes the platform installable rather than merely documented.
Two ways in, one implementation:
Signing in
Remote, with OAuth. Give the client the URL and nothing else:
Claude, ChatGPT and Claude Code prompt for sign-in when they connect: the client
opens a browser and the human signs in with GitHub or Google. A request with no
credential answers 401 with a WWW-Authenticate header pointing at
/.well-known/oauth-protected-resource/mcp, which names api.gagarin.cloud as
the authorization server. This server decides nothing about a token itself; the
engine does, on every call. GAGARIN_MCP_ORIGIN and GAGARIN_ISSUER override the two public
names for a development setup; they are separate from GAGARIN_API, which in
the cluster is the in-cluster Service and no address a client could sign in at.
Remote, with a credential in a header. For a client that cannot sign in
over OAuth, or a machine that should not: a credential from gg login or
gg creds create.
Local, over stdio. npm run stdio from a clone runs the same tools over a
pipe, reading the file gg login wrote, or GAGARIN_TOKEN if it is set. It is
here to develop against, and is deliberately not published to npm: the point of
this server is that adding Gagarin to an agent is a URL and not an install, and
a package on somebody's laptop is a second copy of src/tools.ts that goes
stale the day a tool changes.
A credential that has expired or been revoked is caught at the door too, because
a client signs in again only on an HTTP 401: every POST asks the engine
/v1/whoami with the caller's token first, and the engine's 401 becomes a 401
with error="invalid_token". One extra in-cluster call per request, and no
cache — a remembered token is a stored token, and this server stores none. Any
other failure there (the engine unreachable, a 5xx) is not a sign-in problem, so
the request goes on and each tool reports it with the engine's own code.
Developing
What is here
Project memory
Every project carries a memory: small, durable facts an agent saves about a
codebase — a decision and why, a convention, a gotcha — so the next session does
not rediscover them. It is a built-in of the project, like its registry, and
these tools are the only way to reach it: the memory service has no address
of its own, no gg command and no console page. The engine decides who may
read (viewer) and who may write (editor), on every call, like everything else.
Export and import have no tool: they are for people and scripts, and a tool's definition costs tokens in every session whether it is called or not.
These answer the memory service's own text — a plain-text rendering packed to
the budget — rather than the JSON around it. That is a narrower case of the rule
below, not an exception to it: the rendering is still the engine's, and returning
both would spend twice the tokens the service exists to save. A body without
text comes back as JSON like any other answer.
It is a translator, and nothing else
It holds no credential of its own, has no database, and makes no decision the
API does not make. Every tool is one call to api.gagarin.cloud carrying the
caller's own bearer token, and every refusal is the engine's refusal passed
through unedited.
That is the property everything else rests on: possessing this server grants nothing at all. It is what makes it safe to put a public endpoint in front of a single write gate, and nothing here may be changed in a way that weakens it.
Two consequences worth stating, because both look like omissions:
- Answers are the engine's JSON, not a summary of it. Every service, ledger
line and connection already carries a
sentencewritten by the engine, precisely so a terminal and a dashboard cannot describe the same row differently. A third renderer here would be a third opinion to keep in step. - Errors are
[code] messagewith ahint:line, which is whatggprints. One format, so an agent that has read the Gagarin skill recognises what comes back here without being taught a second one. When the engine sends more than the envelope — amemory_duplicatecarries the near-duplicates — that is appended after the hint rather than dropped.
What it deliberately cannot do
Four things need a machine, and offering them here would produce failures that read like platform faults:
- Build and push an image.
gg ship— build, push and deploy fused — shells out to docker where the source is.deployhere runs an image that is already in Gagarin's registry: a tag CI pushed, or a restatement. Getting one there is the CLI's job. - Open a tunnel.
gg connectbinds a local port. - Wait for a job to finish.
runsubmits and returns a revision, like every other write here.gg runblocks until the run ends and exits with the script's own exit code, which is what a pipeline wants; over MCP you pollstatusfor the phase and the code. - Click an approval. That is a human with an inbox, by design.
There is also no list of resource types, sizes or scopes in this repository. The
engine owns those and its refusals name them; a z.enum here would be a second
list in a second repository, wrong on the day a type is added — a mistake this
codebase has already made once, in gg, about this exact family of values.
Where it runs
In the Kubernetes cluster, next to the control plane, and not on Vercel beside the site and the console. Those two live outside Scaleway because their job is to still be there and say the platform is down. This one has nothing whatever to say when the API is unreachable; it is that API in another shape, so it belongs next to it and reaches it over the in-cluster Service rather than hairpinning out through the load balancer.
The pod runs as a ServiceAccount with no RBAC and no mounted token, on a read-only root filesystem. It needs none of them.
Every push to main builds the image and rolls it out —
.github/workflows/deploy.yml. The credentials that can do that are secrets of
the production environment, which only main may use, so a pull request never
runs next to them. Merging to main is deploying.
Adding a tool
One server.registerTool call in src/tools.ts: a name, a description saying
the rule a caller most needs, a zod shape, and one api.call. Then a test in
src/tools.test.ts asserting the path, the method and the body — those are the
only things it is possible to be quietly wrong about, and a deploy that PUTs to
the wrong path answers 404 and reads like a missing service.
Do not add a tool for something the API does not do. This file has no business being the place a feature appears first.
來源:README.md,提交 0cb9462
工具
0版本歷史
3- v0.3.0最新Oct 21, 2026
- v0.2.0Sep 22, 2026
- v0.1.0Sep 18, 2026
評分
已滿足適用檢查項的 85%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通必需25 分
- 已宣告認證方式必需10 分
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分