ALT/FNDATA

com.altfndata由 altfndata.com 發布官方發布者v0.4.7更新於 Nov 2, 2026

Auction comparables for luxury & collectibles appraisal: search, stats, price trends, valuations.

已驗證Streamable HTTP可網頁執行金融資料與分析

概覽

AI 產生的概覽

連接 ALT/FNDATA 精品與收藏品拍賣資料,讓助理搜尋可比成交、統計市場行情、追蹤價格走勢並估算單品價格。

可以做什麼
  • 列出並檢視 20 張拍賣資料表的說明與欄位結構
  • 依條件篩選、排序、選擇欄位並分頁查詢單一資料表
  • 彙總成交價:成交筆數、中位數、百分位數、日期區間與主要拍賣行
  • 依年、季或月檢視價格隨時間的變化
  • 跨所有品類進行全市場關鍵字搜尋
  • 依可比成交為單品估價,並讀取預先計算的型號層級價格指數
適用情境
適合在鑑價或研究精品與收藏品時使用,例如腕錶、手袋、珠寶、裸石、汽車、葡萄酒、藝術品、錢幣等,需要來自 100 多家拍賣行的成交比較、市場統計或價格趨勢。
執行需求
可使用託管的遠端端點並以 OAuth 登入,或在本地以 pip 或 uvx 安裝執行(需 Python 3.10+)。需要 ALT/FNDATA API 金鑰:本地執行時透過 ALTFINANCE_API_KEY 提供,託管服務則在 OAuth 登入頁輸入。需能連線至 ALT/FNDATA API。
安裝前請注意
需要 ALT/FNDATA 帳號與 API 金鑰,金鑰會連同查詢參數傳送至 ALT/FNDATA API。方案等級會限制可存取的資料表與列數配額,回應中可能附上一行產品或升級提示。所有工具皆為唯讀,但價格提醒無法透過此伺服器建立,須在應用程式內管理。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 ALT/FNDATA,將其新增到工作區。
  2. 連接 所需的 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/com.altfndata%2Faltfinance-mcp/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。 客戶端會在首次連接時完成 OAuth 登入。

{
  "mcpServers": {
    "alt-fndata": {
      "type": "http",
      "url": "https://mcp.altfndata.com/mcp"
    }
  }
}

README

ALT/FNDATA MCP Server

Connect your AI assistant to luxury and collectibles auction data. Query watches, jewelry, loose gemstones, handbags, cars, motorcycles, aircraft, wine and whisky, fine art, works of art, design, fashion, shoes, automobilia, books, coins, perfume, accessories, musical instruments and other vehicles from 100+ global auction houses, in plain language.

It uses the open Model Context Protocol (MCP), so it works with Claude, ChatGPT, Gemini, Perplexity and other assistants and developer tools that support MCP servers.

Quick Start

1. Get an API Key

Get your key from API Key & MCP in the ALT/FNDATA app.

2a. Connect the hosted server (no install)

In any assistant that supports remote MCP servers (often called custom connectors), add a connector with this URL:

https://mcp.altfndata.com/mcp

Choose OAuth if you are asked for an authentication method. A sign-in page then asks for your ALT/FNDATA API key.

  • Claude: Settings → Connectors → add a custom connector.
  • ChatGPT: add it as a custom connector (developer mode). ChatGPT only connects to hosted servers, so use this option.
  • Perplexity: Settings → Connectors → add a custom connector with the URL above.
  • Gemini app: Settings → Connected Apps → add a custom app with the URL above (personal Google accounts).
  • Gemini Enterprise: an admin adds ALT/FNDATA once for the organisation. See Gemini Enterprise set-up below.

Menu names and plan availability are set by each assistant and change over time; check its help pages if the steps differ.

Gemini Enterprise (admin set-up)

Gemini Enterprise connects through a Custom MCP Server data store, which an admin sets up once for the organisation.

  1. Register a client. The response contains a client_id and a client_secret. The secret is shown only once, so store it safely.

    bash
    curl -X POST https://mcp.altfndata.com/register \  -H "Content-Type: application/json" \  -d '{"client_name": "Gemini Enterprise (your organisation)",       "redirect_uris": ["https://vertexaisearch.cloud.google.com/oauth-redirect"],       "token_endpoint_auth_method": "client_secret_post",       "grant_types": ["authorization_code", "refresh_token"],       "response_types": ["code"],       "scope": "read"}'
  2. In the Gemini Enterprise console, add a Custom MCP Server data store with these values:

    FieldValue
    MCP Server URLhttps://mcp.altfndata.com/mcp
    Authorization URLhttps://mcp.altfndata.com/authorize
    Token URLhttps://mcp.altfndata.com/token
    Client IDclient_id from step 1
    Client Secretclient_secret from step 1
    Scopesread
    Enable PKCEticked
  3. Each user then connects from Gemini and signs in with their own ALT/FNDATA API key. The client ID and secret only identify your organisation's Gemini Enterprise; they give no access to data on their own.

Google's guide to setting up a custom MCP server describes the console screens.

2b. Or run it locally

For desktop apps and developer tools that launch MCP servers on your machine, either install it with pip:

bash
pip install altfinance-mcp

or run it with no install using uv — point the client's command at uvx with altfinance-mcp as the argument (see the uvx config example below):

bash
uvx altfinance-mcp

Most tools take a configuration in this shape; add it to the tool's MCP settings and restart it.

Example, Claude Desktop: the config file is %APPDATA%\Claude\claude_desktop_config.json on Windows and ~/Library/Application Support/Claude/claude_desktop_config.json on macOS.

json
{  "mcpServers": {    "altfinance": {      "command": "altfinance-mcp",      "env": {        "ALTFINANCE_API_KEY": "your-api-key-here"      }    }  }}

With uvx (no pip install needed), use "command": "uvx" and pass the package as an argument:

json
{  "mcpServers": {    "altfinance": {      "command": "uvx",      "args": ["altfinance-mcp"],      "env": {        "ALTFINANCE_API_KEY": "your-api-key-here"      }    }  }}

Example, Claude Code:

bash
claude mcp add altfinance -- altfinance-mcp

Set the env var before launching:

bash
export ALTFINANCE_API_KEY="your-api-key-here"

What You Can Ask

Once connected, ask your assistant questions like:

  • "What tables are available in the ALT/FNDATA database?"
  • "Show me the schema for the watches table"
  • "Find the top 10 most expensive Rolex watches sold after 2020"
  • "How many Hermes handbags were sold by Christie's?"
  • "Give me market stats for Patek Philippe watches sold at Phillips"
  • "How have Hermes Birkin prices moved over the last five years?"
  • "Price-check a Rolex Daytona 116500 white dial"
  • "Search the whole market for a Burma ruby ring over $50k"
  • "What loose sapphires have sold at auction?" (uses gems, not jewelry)

Available Tools

All 9 tools are read-only and annotated with readOnlyHint: true. No data is modified by any tool.

ToolDescription
list_tablesLists the 20 available tables with live descriptions and column counts
get_table_schemaShows column names and types for one table
query_tableQueries a table with filters, sorting, field selection, and pagination
market_statsRealized-price summary for a table or filtered segment: count of sales, median, 25th/75th percentiles, average, min/max, sale-date span, and top vendors by volume
price_trendHow realized prices moved over time, bucketed by year, quarter, or month (count, median, average per period)
price_checkFair-value range for a single item from comparable sales, with source links. Live comp categories: handbags, watches, cars
searchWhole-market keyword search across every category at once, merged by realized price. With no category it fans out across all 20 tables
market_indexPrecomputed model-level price index (low / 25th / median / 75th / high, sample size, trend) for a brand or model. Covered categories: handbags, watches, cars
list_alertsRead-only view of price alerts, or guidance on enabling them. See "Price alerts are read-only" below

Every tool carries readOnlyHint and openWorldHint.

Price alerts are read-only

Price alerts belong to a signed-in ALT/FNDATA account (Cognito login), not to an API key. The MCP authenticates with an API key only, so it cannot create or enable alerts, and the alerts feed itself is not reachable for an API-key caller. list_alerts therefore either reports fired alerts (when a session makes the feed reachable) or returns guidance on setting alerts up in the app at app.altfndata.com. Alert allowance by plan: free 0, registered 1, collector 10, pro 100, included with Membership.

Feature and plan suggestions

Some tool responses may append a single short "💡" line suggesting a complementary ALT/FNDATA product or a plan upgrade. This happens at most once per response, only at a genuine tier boundary (a table your plan does not include, or an exhausted row quota) or as a relevant feature tip, and never for unlimited or comp accounts. It never changes the data returned.

Query Capabilities

  • Filter by any column using operators: eq, neq, gt, gte, lt, lte, like, in, not_in, is_null, is_not_null
  • Sort by any column, ascending or descending
  • Select specific fields to return
  • Paginate with limit/offset (max 500 rows per request)

Data Coverage

The database spans 20 tables. Call list_tables for the live set with current column counts.

TableDescription
watchesLuxury watch auction results
handbagsLuxury handbag auction results
jewelryFinished jewelry, mounted pieces (rings, necklaces, bracelets, earrings) set with gemstones
gemsLoose, unmounted gemstones (single stones and parcels). Use this for gemstone valuations, not jewelry
automobileCollector car auction results
motorcycleCollector motorcycle auction results
aircraftAircraft auction results
wine_whiskyWine and whisky auction results
works_of_artWorks of art with stone/jewelry relevance (jade, jadeite, diamond-set, etc.)
fine_artFine art auction results across all movements and periods
designDesign and decorative arts: furniture, lighting, glass, ceramics, studio/industrial design
fashionFashion and couture: clothing and accessories (not handbags or shoes, which have their own tables)
shoesFootwear: designer shoes and collectible sneakers
automobiliaAutomotive memorabilia, parts, signage, models and related collectibles (not the cars themselves)
booksBooks, manuscripts, maps and printed material
coinsNumismatic coin auction results
other_automobileOther vehicles: boats, tractors, trucks, buses and military vehicles (not cars or motorcycles)
perfumePerfume and collectible fragrance bottles and flacons
accessoriesFashion accessories: belts, scarves, cufflinks, brooches and sunglasses, including gem-set pieces
musical_instrumentsMusical instruments: guitars, violin family, pianos and keyboards, woodwind, brass, percussion and amplifiers

gems vs jewelry: gems holds LOOSE, unmounted stones (the right table for a gemstone valuation); jewelry holds FINISHED, mounted pieces set with stones. If one returns nothing, try the other.

Data sources include Christie's, Sotheby's, Phillips, Bonhams, Artcurial, Dorotheum, Heritage Auctions, and 100+ other auction houses worldwide.

Hosted Server

The hosted server at https://mcp.altfndata.com/mcp (Quick Start 2a) is this package running in HTTP mode. Any MCP client that supports remote servers with OAuth can connect to it; the sign-in page asks for your ALT/FNDATA API key, so no local installation is needed.

Self-Hosting the Remote Server

To run the MCP server in remote (HTTP) mode:

bash
export ALTFINANCE_TRANSPORT=streamable-httpexport ALTFINANCE_ISSUER_URL=https://mcp.altfndata.comexport ALTFINANCE_RESOURCE_URL=https://mcp.altfndata.compython -m altfinance_mcp

Or with Docker:

bash
docker build -t altfinance-mcp .docker run -p 8000:8000 \  -e ALTFINANCE_TRANSPORT=streamable-http \  -e ALTFINANCE_ISSUER_URL=https://mcp.altfndata.com \  -e ALTFINANCE_RESOURCE_URL=https://mcp.altfndata.com \  altfinance-mcp

The remote server exposes:

  • POST/GET/DELETE /mcp — MCP Streamable HTTP endpoint (authenticated)
  • GET /.well-known/oauth-authorization-server — OAuth metadata
  • POST /register — Dynamic Client Registration
  • GET /authorize — OAuth authorization
  • POST /token — Token exchange
  • GET/POST /login — API key entry form

Environment Variables

Local (stdio) mode

VariableRequiredDefaultDescription
ALTFINANCE_API_KEYYes—Your ALT/FNDATA API key
ALTFINANCE_API_URLNohttps://api.altfndata.comAPI base URL

Remote (HTTP) mode

VariableRequiredDefaultDescription
ALTFINANCE_TRANSPORTYesstdioSet to streamable-http
ALTFINANCE_API_URLNohttps://api.altfndata.comAPI base URL
ALTFINANCE_HOSTNo0.0.0.0HTTP listen address
ALTFINANCE_PORTNo8000HTTP listen port
ALTFINANCE_ISSUER_URLNohttp://localhost:8000OAuth issuer URL (your public URL)
ALTFINANCE_RESOURCE_URLNoSame as issuerOAuth resource server URL

Privacy Policy

This MCP server connects to the ALT/FNDATA API (api.altfndata.com) to retrieve auction data. The following outlines our data practices:

  • Data collection: The server sends your API key and query parameters (table names, filters, sort options) to the ALT/FNDATA API. No personal user data is collected beyond what is required for API authentication and query execution.
  • Usage and storage: Query data is processed in real-time and returned to the MCP client. The server does not persist, cache, or store any query results or user data locally.
  • Third-party sharing: Data is exchanged only between the MCP client and the ALT/FNDATA API (api.altfndata.com). No data is shared with any other third parties.
  • Data retention: The server is stateless. No user data or query history is retained after a session ends.
  • Contact: For privacy inquiries, contact [email protected].

Full privacy policy: https://altfndata.com/privacy-policy/

Support

Requirements

  • Python 3.10+
  • An ALT/FNDATA API key

License

MIT

來源:README.md,提交 e48e0fb

工具

9

list_tables

List Data Tables

List every auction-data table ALT/FNDATA serves, with live descriptions and column counts. Start here whenever a question names a category and you need the right table alias to pass to get_table_schema, query_table, market_stats or price_trend. The set spans watches, jewelry (finished/mounted pieces), gems (loose stones), handbags, cars, motorcycles, wine & whisky, works of art, fine art, coins, and more. Always call this for the current set rather than assuming it, and note that loose gemstones live in `gems`, not `jewelry`. Example: for "what categories of data do you have?" or before "show me the most expensive coins sold at auction" (to confirm the `coins` alias exists).

無需輸入參數。

get_table_schema

Get Table Schema

List a table's column names and types so you can build a precise query. Call this before query_table (or before adding `filters` to market_stats / price_trend) to learn the exact field names a table exposes — e.g. whether prices are in `usd_price_decimal`, how the brand/designer field is named, or whether a `carats` column exists. Avoids guessing column names. Example: before querying Rolex sales, call get_table_schema("watches") to confirm the brand field is `designer` and the price field is `usd_price_decimal`. Args: table: Table alias (call list_tables for the full set). Note: "gems" = loose/unmounted stones; "jewelry" = finished/mounted pieces.

輸入參數table必填

query_table

Query a Table

Query one known table with precise filtering, sorting, and field selection. Use this when you already know the target table (from list_tables) and want exact control — e.g. "the 10 most expensive Rolex watches sold since 2020" becomes table="watches", filters on `designer`/`sale_date`, sort by `usd_price_decimal` desc, limit 10. If you don't know which table holds the item, use `search` (whole-market) instead; for aggregate figures (median, percentiles) use `market_stats`. Args: table: Table alias (call list_tables for the full set). "gems" = loose stones (use for gemstone valuations); "jewelry" = finished pieces. fields: List of column names to return (e.g., ["item_title", "vendor", "usd_price_decimal"]). If not specified, returns all columns. filters: List of filter conditions. Each filter is a dict with: - "field": column name - "op": operator — one of "eq", "neq", "gt", "gte", "lt", "lte", "like", "in", "not_in", "is_null", "is_not_null" - "value": the value to compare against Example: [{"field": "vendor", "op": "eq", "value": "Phillips"}, {"field": "usd_price_decimal", "op": "gte", "value": 50000}] sort_field: Column name to sort by (e.g., "usd_price_decimal" or "sale_date") sort_direction: "asc" or "desc" (default: "desc") limit: Maximum rows to return (default: 20, max: 500) offset: Number of rows to skip for pagination (default: 0)

輸入參數limittable必填fieldsoffsetfilterssort_fieldsort_direction

market_stats

Market Statistics

Summarize the realized-price market for a table or a filtered segment. Returns count of sales, median, 25th/75th percentiles, average, min/max of `usd_price_decimal`, the sale-date span, and the top vendors by volume — all computed server-side over the full matching set (not a sample). Args: table: Table alias (call list_tables first). "gems" = LOOSE, unmounted stones (use for a gemstone-market read); "jewelry" = FINISHED, mounted pieces. A loose-stone question can span both. filters: Optional list of filter dicts, same shape as query_table (field/op/value). Narrow to a segment, e.g. [{"field": "designer", "op": "eq", "value": "Patek Philippe"}]. sold_only: When true (default), restricts to sold lots with a positive USD price so the stats reflect realized transactions.

輸入參數table必填filterssold_only

price_trend

Price Trend Over Time

Show how realized prices moved over time for a table or filtered segment. Buckets sold lots by sale period and reports, per period, the number of sales, the median, and the average `usd_price_decimal`. Args: table: Table alias (call list_tables first). Gems = loose stones; jewelry = mounted pieces. filters: Optional filter dicts (field/op/value), same shape as query_table. by: Time bucket — "year" (default), "quarter", or "month". sold_only: Restrict to sold lots with a positive USD price (default true).

輸入參數bytable必填filterssold_only

price_check

Price Check (Valuation)

Estimate a single item's fair-value range from comparable auction sales. Give either a free-text description (e.g. "Hermès Birkin 25 Togo, gold hardware") OR a lot URL from an auction house. Returns a realized-price range (low / median / high), a confidence read, and comparable sales with source links. Best for valuing ONE specific piece; for a whole-market read use market_stats. Live comp categories are handbags, watches, and cars. Loose gemstones and jewelry are intentionally held from comp-matching (under-specified colored stones give unreliable medians) — for those, use market_stats on `gems` (loose stones) or `jewelry` (mounted pieces) instead. Args: description: Free-text item description. lot_url: A lot URL from an auction house (alternative to description). category: One of "handbags", "watches", "cars". Inferred from the text if omitted.

輸入參數lot_urlcategorydescription

market_index

Market Price Index

Precomputed model-level price index (headline figures) for a model or brand. Reads the ALT/FNDATA Index's precomputed hot-stats — instant, no scan. Give a typed model `query` (e.g. "Hermès Birkin 25", "Rolex Daytona 116500") for a single model's realized-price band (low / 25th / median / 75th / high), sample size, and recent trend; or give a `brand` alone for that brand's whole set of model indices. Covered categories are handbags, watches, and cars. For other categories, use market_stats (whole-market read) or price_trend instead — this tool never invents a figure that isn't precomputed. Args: query: A specific model to look up (brand + model + optional size/material). brand: A brand to list all model indices for (alternative to query). category: One of "handbags", "watches", "cars". Inferred from the text when omitted.

輸入參數brandquerycategory

list_alerts

List Price Alerts

Show ALT/FNDATA price alerts (read-only) or explain how to set them up. Price alerts watch a saved item and fire when a matching lot sells at or below your target. They belong to a signed-in ALT/FNDATA account, not to an API key — so alerts are created and managed in the app (app.altfndata.com), and this MCP can only read/report them. If your key isn't tied to a signed-in session, this returns guidance on enabling alerts (allowance: free 0 · registered 1 · collector 10 · pro 100 · included with Membership) rather than a data feed. Args: limit: Max fired alerts to show if the alerts feed is reachable (default 25).

輸入參數limit

版本歷史

2
  1. v0.4.7最新Oct 26, 2026
  2. v0.4.6Oct 25, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分