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 分