
Alphadesk Terminal
io.github.vigneshv1cky由 GitHub 帳號 vigneshv1cky 發布v0.2.1更新於 Oct 24, 2026
Read-only market data, SEC filings and financial statements, on your own vendor keys.
發布方自己的服務:Terminal Tax
概覽
AlphaDesk Terminal 是自架的行情研究伺服器,為 AI 助理提供 53 個唯讀工具,用來讀取行情、新聞、SEC 文件、財報、持股與選擇權資料。
- 可以做什麼
- 讀取行情、圖表、漲跌排行、選擇權鏈與加密貨幣,資料來自讀者自己的行情供應商,另含美國公債殖利率曲線及可選的 Nasdaq、Yahoo 與社群來源。讀取 SEC EDGAR 文件及其全文、XBRL 財務報表、Form 4 內部人交易與業績公告。讀取公司簡介、關鍵統計、分析師、財報與公司行動行事曆、股利、拆股與 IPO。讀取合併後的新聞來源(近三天),支援按字詞或語意搜尋,並標示每則新聞的來源。讀取機構與內部人持股、基金與持倉,並透過資料來源工具區分授權供應商與擷取來源。
- 適用情境
- 當你希望 AI 助理依據原始紀錄而非摘要來研究美股、基金、選擇權或加密貨幣,且已持有行情或新聞供應商金鑰時使用。適合 SEC 文件與財務報表查閱、財報與行事曆查詢,以及在自己新聞來源中搜尋。它不用於交易、下單或持倉管理。
- 執行需求
- 本機 Python 3.11+ 程序,從 PyPI 安裝(或用 Docker),僅監聽本機。必須提供含真實聯絡信箱的 SEC User-Agent。保險庫金鑰(ALPHADESK_VAULT_KEY)用於加密儲存的供應商金鑰,必須妥善保存。ALPACA_API_KEY、ALPACA_SECRET_KEY、FMP_API_KEY、FINNHUB_API_KEY、POLYGON_API_KEY、ALPHAVANTAGE_API_KEY 等供應商金鑰為選用,但 EDGAR 與公債以外的資料需要它們。可選用 ALPHADESK_DATABASE_URL 搭配 Postgres;可選用 ALPHADESK_LOGIN_EMAIL 與密碼雜湊啟用登入。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Alphadesk Terminal,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
AlphaDesk — dense, fast market-research terminal & MCP integration platform
[PyPI] [License: AGPL v3] [Commercial licence available] [Python 3.11+] [React 19] [MCP tools: 53]
A dense, fast market-research terminal and integration platform. Readers connect their own market-data and news providers; AlphaDesk is the workspace that connects, checks and presents what those providers — and the public record at SEC EDGAR and the US Treasury — actually say. Questions are asked in the reader's own AI agent (Claude, ChatGPT, Codex, Cursor, opencode), which reads the same records through 53 read-only agent tools (MCP).
AlphaDesk reads: quotes and charts, news, SEC filings, financial statements, ownership and insider activity, earnings and corporate calendars, options, crypto. It does not trade, route orders, hold positions, score ideas or write summaries.
Two ways to use it — the managed cloud or your own server. The code is open source under the GNU AGPL-3.0, with a commercial licence for anyone who cannot meet its terms. See Licence.
[The Markets board: a live chart, the basket rail, equity overview and the funds built on a stock]
Figures in every screenshot are blurred on purpose: they came from a reader's own vendor keys, and vendors restrict public display of their data. The layout is the real thing.
Quick start — run it yourself, for one person
You need Python 3.11+ (or Docker; where a command below says python and your shell
only knows python3, use that, or the virtual environment's own python), and your own market-data and news keys for
anything beyond SEC EDGAR and Treasury data. No account, no sign-in, no
database to set up.
Open http://127.0.0.1:8000, then connect your vendors on the Account
page and your agent on Agent access. init runs once: it makes the
settings file ~/.alphadesk/.env (owner-only) holding a vault key that seals
your stored vendor keys, the contact address the SEC asks for, and
single-person mode. Keep a copy of that file — without the vault key the
stored vendor keys cannot be opened. The server listens on this machine only.
To run exactly what the cloud runs — Postgres and a login of your own, instead of
SQLite and no sign-in — set it up with --like-cloud. It asks for a password
(type it in a terminal; it is never printed), makes the settings file with a
password hash, and creates the Postgres database if the server is running:
Then python -m alphadesk.main dashboard as above, and sign in with that email and
password. Use --login for a different login email, --database-url for another
Postgres, and --password-hash (from python -m alphadesk.main hash-password)
to skip the prompt. For a setup with no typing at all, for example from a script:
What to know about the Postgres path:
- Version. It is built and run against Postgres 16. The driver is a pure-Python one that comes with the install, so there is nothing to compile.
- The database.
init --like-cloudcreates the database if the server is running and the user may create databases. If it cannot, it still writes the settings and prints what to do, usuallycreatedb alphadesk(or start Postgres first). Tables are created at the first start, and starting again is safe. - The word-search index. The first start also tries to create the
pg_trgmextension and the indexes that make word search fast. If the database user may not create extensions (some managed services), the log says so once and search still works, only without the index. Ask the service to allowpg_trgm, or runCREATE EXTENSION pg_trgmas an administrator, and restart. - Moving from SQLite. The two stores are separate: switching an existing setup to
Postgres starts with an empty ledger. Your vendor keys sealed in the old store are not
carried over, so keep the settings file and add the keys again on the Account page,
or import them with
python -m alphadesk.main keys import-file. - Backups. The ledger is one database: back it up with
pg_dump. Keep the vault key in the settings file as well, because stored vendor keys cannot be opened without it.
With Docker instead:
The first start does the same setup inside a data volume and keeps it there. It also starts Postgres beside the app, the same database the live server runs, so what you test locally is what runs in the cloud; the word search uses a Postgres index there that SQLite cannot have.
What to know about the Docker path:
- The first build is large and slow. The image holds Python, a CPU-only build of
the machine-learning library and the 1.2 GB embedding model that search by meaning
uses, baked in so a starting container fetches nothing. Expect several gigabytes and
a long first build.
ALPHADESK_SEMANTIC_SEARCH=offstops the model being loaded when the app runs; it does not shrink the image. - Two volumes hold everything.
alphadesk-datahas the settings file (with the vault key) andalphadesk-pghas the database.docker compose downkeeps both;docker compose down -vdeletes them and with them your history and stored keys. - Back up the settings file.
docker compose cp alphadesk:/data/.env ./alphadesk.envcopies it out. Without the vault key the stored vendor keys cannot be opened. - Update.
git pull, thendocker compose up -d --build. Settings and data stay. Watch it withdocker compose logs -f alphadesk. - No sign-in inside the container. It runs in single-person mode on
127.0.0.1:8000, as above. For a login of your own use the host setup with--like-cloud, or put an access token in front as described below. - Agents. Create the token on the Agent access page as usual; the tools answer on
http://127.0.0.1:8000/api/agent/tools/mcp. To reach them from another machine, setALPHADESK_BASE_URLto the address that machine uses andALPHADESK_ALLOWED_HOSTSfor any other name, and keep an access token in front. Reachable from other machines? Sign-in is off in this mode, so anyone who can reach the port can use it and read your connected vendors. Keep it on127.0.0.1, or set an access token — the browser then asks for it once, and agents keep using the tokens you make on Agent access:
Put the result in ~/.alphadesk/.env as ALPHADESK_ACCESS_TOKEN=... (with
Docker, pass it as an environment variable) and restart. Over the internet,
put HTTPS in front of it.
Other ways to run it, serving other people, and every setting are under Two ways to run it and Configuration reference.
Contents
- What AlphaDesk is — and is not
- Two ways to run it
- Design principles
- Features
- Data sources
- Search
- Agent access (MCP)
- Accounts, security and privacy
- Architecture
- Repository layout
- Development
- Configuration reference
- Production deployment and operations
- Testing and quality
- Known limitations
- History
- Licence
What AlphaDesk is — and is not
It is offered free at present (payments are designed but switched off; see Accounts).
Two ways to run it
Option A — Managed cloud
- Open the hosted terminal and sign in with the email and password its operator set. There is one user per server and no sign-up.
- On the Account page, connect the market-data and news providers you already use (Alpaca, FMP, Finnhub, Polygon, …). SEC EDGAR and the US Treasury need no key.
- Optional: connect your own agent from the Agent access page (in the sidebar, beside Account) — a token for Claude Code, Codex, Cursor or opencode, or add the server URL as a connector in Claude.ai or ChatGPT.
Option B — Self-hosted (AGPL-3.0)
You need a SEC User-Agent with real contact details (SEC blocks requests without one), Python 3.11+ or Docker, and — for anything beyond EDGAR and Treasury data — your own vendor keys.
1. Configure. Copy the template and fill in the two required values:
Generate the vault key with:
2a. Install from PyPI — the shortest route; the built interface ships with the package:
The terminal is at http://127.0.0.1:8000. This install is small and quick and
searches news by words. For search by meaning too, install the extra
(pip install "alphadesk[search]", about a gigabyte of PyTorch); the first start
then downloads a 1.2 GB model into the Hugging Face cache.
2b. Or run from a clone, which is what you want if you intend to change anything:
2c. Or run with Docker. The image bakes the embedding model in, so a container downloads nothing at start:
With ALPHADESK_AUTH left on, set your login in .env (an email and a
password hash from python -m alphadesk.main hash-password); the server will
not start with sign-in on and no login set.
3. Keep it private or publish your changes. Under the AGPL, if you let other people use a modified copy over a network, you must offer them the source of your version. Using it yourself, unmodified, or keeping your changes to yourself on your own machine carries no such obligation.
Design principles
These are the product. Much of what might look missing was built, measured and removed on purpose — DECISIONS.md says what and why. Bring evidence and open an issue.
- Nothing is paraphrased. Every panel and agent tool returns what a vendor or EDGAR actually said — a filing in pages, a statement series, a story's own text. If a figure cannot be shown with its source, it is not shown.
- Indicators hide when the data cannot support them. Bar coverage and gap size are measured per series; below the floor RSI and MACD are hidden rather than drawn over sparse prints that would render identically to a liquid name's chart.
- Nothing is ranked for you. The screener window is alphabetical; calendars and agent tools order only by the figure on each row. Search results are newest first — a model may decide what is related, never what comes first.
- An idle terminal spends nothing. Background loops fetch only public data and each reader's own news; everything else is fetched on request, on the requesting reader's keys.
- Untrusted text stays untrusted. Headlines, articles, filings and transcripts are data. Nothing here acts on them, and the agent tools that return them say so.
- Not an aggregator. Merging several news feeds is the reader's act, on their own credentials, for their own window.
- The agent surface is read-only and per reader. Every agent call runs as exactly the reader whose token or grant it carries.
- Vendor data is the reader's. No vendor key on the server; no keyless route to a commercial vendor or unofficial endpoint; every vendor cache keyed by reader; vendor data kept only as long as a feature reads it.
Features
Pages
Across the terminal
- The symbol strip scopes every page; picking a row adds and selects the symbol without moving the page.
- Composable boards: show, hide, reorder, size and place tiles; the layout lives in the URL, so a link restores the exact board.
- Live data where the reader's plan streams it (Alpaca stock, crypto and news sockets), polling elsewhere; a 428 prompt names the vendors and plans that would fill any panel the reader's keys cannot.
- Phones: every page is laid out for a 375-pixel screen as well as a desktop.
- Light and dark themes, a hand-rolled design system on a 4-pixel grid with six type roles, and full keyboard focus handling in every overlay.
Data sources
Market data — the reader's own keys
For each panel the reader's connected vendors are asked in a fixed, documented order; the first that carries the figure answers. Charts and option chains are pinned to one vendor, never stitched across tapes.
News — the reader's own feeds
Alpaca (Benzinga), Polygon, Finnhub, Benzinga, Alpha Vantage, Marketaux and FMP. Several feeds merge into one window per reader, de-duplicated by URL. Alpaca's news streams live; the rest poll every five minutes.
Sources with no key — read, not licensed
Three sources need no key because there is nothing to buy: the reader turns each on with a button on the Account page.
Two rules keep them honest. A keyed vendor is always asked first — every
licensed vendor is ordered ahead of every scraped one, so a scraped source
answers only where none does. And provenance travels with the answer:
the catalogue marks the source unofficial, each payload carries it, the tile
subtitle reads "scraped", and the data_sources agent tool resolves any
vendor name back to licensed-or-read. The marker protects the reader's
reasoning; it is not consent from the site.
No ticker is ever read out of a social post: a ticker inside a post is the author's claim, and attaching it would route an unverified assertion into that symbol's context.
Public data — no key
- SEC EDGAR: filings and their text, XBRL financial statements, Form 4 insider trades, 8-K Item 2.02 and 6-K results releases (release day read from the filing itself), ticker and company lists.
- US Treasury: the daily par yield curve.
Every source, how it is collected and its terms are listed in docs/data-sources.md. Vendor terms are separate from the code licence; see Known limitations.
Search
News search works two ways at once, everywhere a reader searches — the News
filter box, "Search all" and the agent's news_search tool:
-
By words — one rule shared by the server and the browser: whole words in order, plurals matched to singulars, a capitalised ticker matched exactly, and a query that names a company also finds stories tagged with it ("robinhood" finds stories tagged HOOD).
-
By meaning — stories whose headline is close in meaning to the query are added and marked related, so "AI data center spending" finds "Equinix plans $5B–$7B annual data center buildout" without a shared phrase. This uses Qwen3-Embedding-0.6B (Apache 2.0), self-hosted inside the server: no text leaves AlphaDesk and there is no model key. Headlines are embedded once as they arrive; the threshold (cosine 0.50) was calibrated so that only on-topic stories are added. Results remain newest first.
The embedding work never competes with the site: the model runs on a single CPU thread, the background worker runs at the lowest operating system priority, and it embeds only while no request is being served. Searches take about a third of a second.
A coin's news panel reads all crypto and what moves it — any coin's
stories, crypto stocks, stories naming crypto, and Fed and rates headlines —
each marked with the reason it is there. The 5-minute news poll also asks the
feed for stories tagged with the main coins by name, because crypto is a small
share of the newest stories across everything. A feed writes a coin as BTCUSD;
those tags are shown as BTC-USD, the way the board writes them, for the coins
the account trades and the large ones in the fixed list — on the page and in the
agent's news tools alike.
Crypto
Crypto comes from Alpaca alone: trading is on Alpaca, so its coins and its venue's numbers are the ones that count. There is no worldwide market-cap order or volume.
- Search follows the account. Every crypto pair the connected Alpaca account
can trade is searchable and chartable, including the pairs against a
stablecoin or bitcoin (
BAT-USDC,ETH-BTC); a coin the account does not carry is not offered. The funds the SEC ticker file lacks (QQQ, TLT, VOO and many more) are added from the account's own asset list, loaded in the background once an hour, so the first search after a start does not have them yet. - The crypto movers list the dollar pairs only (the stablecoin and bitcoin pairs are the same coins priced another way). Active ranks by dollars traded on Alpaca's venue (price times coins); the stablecoins (USDT, USDC, USDG) appear under All but not under Active, Gainers or Losers. A coin's price is the live bid/ask midpoint when its last trade is stale, and a 24-hour change with no starting price in the six hours before the 24-hour mark is shown as a dash. Volume and liquidity are Alpaca's own venue's, which is thin; the column says so.
- Checking it. Signed in,
/api/crypto/tradablelists the coins and pairs the account can trade, and/api/crypto/checktests every pair for search, price bars and a place in the movers. - A coin chart uses real trades for its live edge (the bid/ask midpoint moves many times a second and made the chart shake), and fetches one spare day of bars, not the three a stock needs for weekends.
Agent access (MCP)
AlphaDesk exposes the same records the interface shows as 53 read-only
tools over the Model Context Protocol,
at /api/agent/tools/mcp. Every call runs as the reader, on their keys,
rate-limited to 120 requests a minute per token.
Connecting
- Claude.ai, ChatGPT — add a custom connector with the server address and sign in when asked (OAuth 2.1 with PKCE; one live grant per registered app).
- Claude Code, Codex, Cursor, opencode — create a token on the Agent access page, in the sidebar beside Account (shown once, stored hashed, revocable at once); the page gives each client's exact setup, and a tab for your own program using the data API below.
Tools
Prices around the clock. Outside the regular session a quote and a movers
row take the latest trade there is: after hours until 8pm New York, then the
overnight venue until 4am (marked overnight, source "overnight venue"), then
pre-market. The change is measured from the closed session's own close, and the
trade's time is as_of (quotes) or extended_at (movers). Volume stays the
closed session's. Overnight the bid and ask are still the evening's book from
the regular exchanges, so a spread read then is not one to rely on.
A quote that is not a market. A quote whose symbol has no daily bar in the
last ten days — a retired ticker or a long halt — carries stale: true: its
price is the last trade there was, as_of is that trade's date, and there is
no change. The company may trade under a new ticker; find_symbol finds it.
Which address. The tools answer only on the names the server is set to answer
to: the public address in ALPHADESK_BASE_URL, plus any names in
ALPHADESK_ALLOWED_HOSTS (a comma-separated list). A host that is not on that
list is refused. On Cloud Run, which serves one service under two addresses,
put the second in ALPHADESK_ALLOWED_HOSTS.
Measures, not verdicts. The tools return figures and plain-fact flags — a
move's size, how much of a swing was given back, whether a story is about the
name or only lists it — and never a score, a rating or a recommendation. Each
reply says what it could not read (unavailable, reliable), and a refusal
says what happened: no key, a plan that excludes the data, or connected
vendors that simply have nothing for that company (small companies often have
no analyst coverage). The reader's price plan is stated in data_freshness:
a free plan's volume is one exchange's alone and understates the market.
A smaller tool list for a coin agent. The full list is 53 tools and about
66,000 characters of descriptions on every connect. Send the request header
X-Agent-Toolset: crypto and only the 17 tools that apply to coins are listed
(about 28,000 characters); a tool left out of the list still answers if called by
name. A coin is written BTC-USD; BTC/USD and BTCUSD are accepted too, but a
bare BTC means a listed fund. The answers that carry a price or a tradable flag
(quote, quotes, movers, price_history, price_chart, entry_facts) include
data_venue, the broker those figures came from (today alpaca; unknown when
none can be named), so an agent that trades on one broker can see whose market it
is reading. A token may make 120 calls a minute; set
ALPHADESK_AGENT_RATE_PER_MIN to change that.
Watching how agents use it. Every tool call is logged: the tool, its
arguments, how long it took and how it ended (answered, empty, incomplete or
failed, and why). A caller can add the request headers X-Agent-Task (one id
for all the calls of one question) and X-Agent-Intent (the question in a
line), and can say whether a result helped by sending a small JSON message to
the same address with /feedback in place of /mcp, using the same token:
{"tool": "what_moved", "useful": "yes" | "partly" | "no", "note": "…", "missing": "…"}.
That is the only write on the agent door, and it writes to the usage log
and nothing else. Read the report with python -m alphadesk.main agent-usage --days 30, or /api/agent/usage?days=30 while signed in: which tools are never
called, which come back empty or fail, which are slow (and the twenty slowest single
calls, each with its time, tool, arguments and duration), which chains of calls
repeat (a tool that should exist), and what agents said they were missing. The
log never holds a token, a key, or the agent's reasoning or final answer.
Trying the tools yourself. scripts/agent_probe.py signs in the way an agent does
(with a token saved in ~/.alphadesk-agent-token) and prints what the main tools return
for a symbol: python scripts/agent_probe.py NVDA. Point it at another server with
ALPHADESK_PROBE_URL. It only reads.
The tools are written for an agent that cannot see the screen: find_symbol
resolves a name to a ticker from the SEC list rather than letting an agent
guess; price_chart returns a thinned series carrying each point's RSI and
MACD; filing_text and transcript_text return whole documents in pages;
news_search marks each story as a word or meaning match. Tools that return
publisher or filer text say that it is untrusted input. Every tool carries
readOnlyHint, so a client can call them without asking permission for each
read.
The same tools as a plain HTTP API. For a program that is not an agent — a
trading bot, an importer — the tools are also GET endpoints under
/api/v1, with the same token, the same per-reader keys and the same limits,
plus every bar of price history (the agent tools thin it) paged by time,
and an optional list of addresses a token may be used from. It is read-only,
and polling rather than streaming: see docs/rest-api.md.
Accounts, security and privacy
- Sign-in: one user per server. The only door is the email and password
the operator sets in the settings (
ALPHADESK_LOGIN_EMAILwith a password hash); there is no sign-up and no third-party sign-in (Google, GitHub and Microsoft sign-in were removed on 2026-10-03). Any other account is refused. - Sessions: HMAC-signed cookie, 14-day lifetime, sign-out everywhere.
- Vendor keys: sealed per reader with AES-256-GCM under a master key held outside the database; never logged, never shown after entry. The one way a key leaves is the reader's own Export keys download on the Account page: a plain-text file (no passphrase, by the owner's choice on 2026-10-02, so anyone holding the file holds the keys), available only to their own browser session — never to an agent token or an OAuth grant — signed in within the last ten minutes, limited to five an hour and logged by count, never contents. A passphrase sent to the route still seals the file (scrypt and AES-256-GCM, at least 12 characters).
- Agent credentials: tokens and OAuth codes stored as SHA-256 hashes; OAuth clients sealed; consent page signed, same-site and unframeable.
- Retention — the defaults, all lengthened by
ALPHADESK_KEEP_DATA: stories 7 days, full article text 72 hours, meaning vectors with their stories, company announcements 30 days past the report, the forecast log 120 days, release habits 3 days, press-release checks 24 hours, and the kept copies of slow-changing vendor answers (history, fundamentals, profiles, ratings, calendars) 14 days. Those copies make a restart warm, spare your vendor rate limit, and answer for a vendor that is down; live answers (quotes, movers, the tape, the intraday chart tail) are never kept. Recorded session closes — each finished session's whole-market daily bars, about 200 KB a session compressed — are kept for good whatever the retention setting (onlyALPHADESK_PURGE_ON_KEY_REMOVALor deleting the account removes them): a finished session never changes, and the record is what keeps past-session movers working. Removing a key keeps what it fetched unlessALPHADESK_PURGE_ON_KEY_REMOVALis set. - Deletion: a reader can delete their account, confirmed by typing its email; every row keyed to it is removed in one transaction. The table list is checked against the schema by the test suite.
- No analytics, advertising or tracking.
The full account, session, key-vault and agent-credential design is in docs/hosted-mode.md.
Architecture
Backend — Python 3.11+. FastAPI with synchronous handlers on a
40-worker thread pool and explicit socket deadlines for every upstream.
Providers are structural Protocols (NewsProvider, PriceProvider,
TranscriptProvider), built per reader from their sealed keys and
discoverable through entry points. The request's reader identity travels in
a context variable; background threads deliberately do not inherit it. The
store speaks SQLite locally and Postgres through the pure-Python pg8000
driver in production. The embedding model runs in process on CPU via
sentence-transformers and PyTorch's CPU build.
Frontend — TypeScript, React 19 and Vite, built to static files the Python process serves. Tailwind CSS v4 carries the design tokens (14-pixel root, 4-pixel spacing grid, six type roles, light and dark). TanStack Query shares one query per endpoint. There is no component library and no chart library: primitives are hand-rolled, and the chart is AlphaDesk's own SVG renderer, with candles batched into four paths so the node count is constant in bar count.
Repository layout
Development
Prerequisites
- Python 3.11+, Node with pnpm
- A SEC User-Agent string with real contact details (SEC requires one)
- Your own vendor keys for anything beyond EDGAR and Treasury
- About 1.5 GB of disk for the embedding model, only with the
searchextra, downloaded on first use (or setALPHADESK_SEMANTIC_SEARCH=off)
Set up and run
Generate a vault key (32 random bytes, base64):
For local work without sign-in, set ALPHADESK_AUTH=off (one local
account), put your own vendor keys in .env, and seal them into that
account:
Frontend with hot reload (proxies /api to the running server):
Command line
Extending
- Providers: implement a Protocol and register it through a local module
(
ALPHADESK_PLUGINS) or thealphadesk.providersentry point — docs/providers.md. - Dashboard tiles: register a widget in
ui/src/widgets/, or serve tiles from an external JSON backend (ALPHADESK_WIDGET_BACKENDS) — docs/widgets.md. - Is this the right tool for you, and how it compares: docs/comparison.md. Why the data runs on your own keys: docs/your-own-keys.md.
- Conventions and checks: CONTRIBUTING.md; the rules and what was tried and undone: DECISIONS.md; reporting a vulnerability: SECURITY.md.
Configuration reference
Environment variables (also read from .env). Only the first two are
required.
The full annotated template is alphadesk/deploy/env.example; every
setting's default lives in alphadesk/config.py.
Production deployment and operations
The reference service runs on Google Cloud Run (alphadesk, us-east4)
with Cloud SQL for Postgres.
Deploying — continuous integration runs the tests, lint and build on
every pull request; deploying stays a maintainer's step. After a merge to
main:
The script refuses unless the checkout is a clean main matching the
remote, builds the image on Cloud Build, rolls the service with the new
image only (environment, database mount and scaling untouched), and checks
that the live page serves the new build. The frontend bundle is committed
under alphadesk/app/static, so the image needs no Node build step.
Operations
-
Logs: Cloud Logging for the
alphadeskservice; the ingest loops, pruning and the embedding worker log their progress there. -
If requests stall. Measure from the request logs and ignore each version's first five minutes: every deploy is a cold start. The stalls seen so far came after 15 to 25 minutes of use as memory climbed from about 35 percent to over 80 of the 4 GiB. Three things kept them away: the live stream subscribes in one message per group, the background panel refresh runs 15 panels at a time with a pause (at full pace only in the first five minutes), and expired price answers leave the cache on each insert. If memory climbs above about 75 percent again, raise it with
gcloud run services update alphadesk --region us-east4 --memory 8Gi(this changes only the memory). -
Always-on is required as built; approximate cost at this size is $110–120 a month for the service (plus Cloud SQL). The lever for cost is a smaller embedding model, not scaling to zero.
-
Graceful shutdown is bounded: a revision stops within seconds.
-
Kill switch for search by meaning. If the service ever slows or refuses requests, turn it off without a rebuild — search falls back to words alone:
Always use
--update-env-vars(adds or changes one variable), never--set-env-vars(replaces every variable). The worker's start-up log line reports the cores the machine claims and the thread the model uses (expected: one). -
Background work is shipped switched off, then enabled and watched. A 2-vCPU container reports more cores than it has, so behaviour on a many-core laptop does not predict production: sizing threads from the reported core count once starved the web server of a live instance.
Testing and quality
Known limitations
- Vendor terms. Market data is fetched on your own key, under your own agreement with each vendor, and those terms govern how you may use it. Plans differ — some are personal, some restrict display to others or storage — so check your plan before using AlphaDesk in a hosted or shared setting. Each vendor's terms are linked in docs/data-sources.md.
- Untested paths. Some paid-plan surfaces (Alpha Vantage, Finnhub premium, Polygon paid) were built from documentation and have not been exercised against a live key.
- Search by meaning reads headlines only (summaries would cost several CPU-hours a day per reader), and a new deployment embeds the stored backlog before older stories can match by meaning.
- Legal pages are drafts awaiting counsel.
History
AlphaDesk became a consumption terminal by subtraction. Screener ranking, operator-held data and unofficial sources, the in-app agent and the in-app language model were each removed in turn, every one for a measured or stated reason — see DECISIONS.md. The one model that remains is the self-hosted embedding model used for search.
Licence
AlphaDesk is dual-licensed. Copyright © 2026 Vignesh Murugan.
Open source — GNU AGPL-3.0 (LICENSE). You may use, study, modify and redistribute AlphaDesk. The AGPL is a strong copyleft licence with one clause beyond the GPL: if you run a modified copy and let others use it over a network, you must offer those users the complete source of your version under the same licence. Distributing copies, modified or not, likewise carries the source with it. Running it for yourself imposes nothing.
Commercial licence. For organisations that want to embed AlphaDesk in a proprietary product, run a modified hosted service without publishing their changes, or need an enterprise exception, a commercial licence is available — contact [email protected]. The managed cloud is offered under its own terms of service; subscribers take on no AGPL obligations.
Contributions are accepted under a contributor licence agreement, so the project can continue to offer both licences; contributors keep the copyright in their work.
Dependencies are all under permissive licences (MIT, ISC, BSD, Apache
2.0), and no copyleft dependency may be added — it would prevent the
commercial licence. The web interface ships its third-party notices at
/third-party-notices.txt, written by every build from the packages the
bundle actually contains (the fonts are under the SIL Open Font License). The embedding model, Qwen3-Embedding-0.6B, is Apache 2.0.
Data is not code. The code licence grants nothing over market data. Each vendor's terms govern the data fetched on your key; see docs/data-sources.md.
來源:README.md,提交 c4ec770
工具
0版本歷史
1- v0.2.1最新Sep 20, 2026
評分
已滿足適用檢查項的 40%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分
請在儲存庫或註冊中心條目中宣告授權條款。
其他 Terminal 整合

Terminal Tax
tax.terminal官方發布者
託管式報稅伺服器:讓助理送出美國聯邦 2025 年個人報稅表的事實,由服務計算與檢核,再回傳私人簽署連結。
Terminal
mn.dta官方發布者
面向蒙古宏觀與市場資料檔案的遠端 MCP 伺服器,讓助理搜尋序列、取得面板並驗證帶簽章的觀測資料。
SCRIPTMASTERLABS — Quant Terminal
com.scriptmasterlabs
遠端 MCP 端點,提供以真實資料為基礎的股票代號價位與「squeeze-mirror」預測,用於量化交易分析。

Terminal 7
由 GitHub 帳號 LinkMarine777 發布
Solana 上 stonkfun 幣的訊號、評分和支付資料,供機器人和 AI 代理使用。AI 翻譯
terminal-use
由 GitHub 帳號 computer-agent-labs 發布
讓 AI 助理操作本機真實終端機工作階段:輸入文字、按鍵、點擊、讀取畫面並截圖,包含全螢幕 TUI 程式。