ALT/FNDATA

com.altfndataPublished by altfndata.comOfficial publisherv0.4.7Updated Nov 2, 2026

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

VerifiedStreamable HTTPWeb executableFinanceData & Analytics

Overview

AI-generated overview

Queries ALT/FNDATA luxury and collectibles auction data so an assistant can search comparables, compute market stats, track price trends and price-check items.

What you can do
  • List and inspect the 20 auction tables and their columns
  • Query a table with filters, sorting, field selection and pagination
  • Summarize realized prices: counts, median, percentiles, date span, top vendors
  • Chart price movement over time by year, quarter or month
  • Run whole-market keyword search across all categories
  • Price-check a single item from comparables, and read precomputed model-level price indices
When to use it
Useful for appraising or researching luxury and collectible assets — watches, handbags, jewelry, loose gems, cars, wine, art, coins and more — when you want auction comparables, market statistics or price trends from 100+ auction houses.
Requirements
Either the hosted remote endpoint with OAuth sign-in, or a local install via pip or uvx (Python 3.10+). An ALT/FNDATA API key is required, passed as ALTFINANCE_API_KEY for local runs or entered at the OAuth sign-in page for the hosted server. Network access to the ALT/FNDATA API.
Before you install
Requires an ALT/FNDATA account and API key; the key is sent to the ALT/FNDATA API along with your query parameters. Plan tiers limit which tables and row quotas are available, and responses may include a one-line product or upgrade suggestion. All tools are read-only, but price alerts cannot be created through the server and must be managed in the app.

Installation

In SourceWeft

  1. Open ALT/FNDATA in the dashboard and add it to a workspace.
  2. Connect the required credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/com.altfndata%2Faltfinance-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config. The client completes OAuth sign-in on first connect.

{
  "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

Source: README.md at commit e48e0fb

Tools

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).

Takes no parameters.

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.

Parameterstablerequired

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)

Parameterslimittablerequiredfieldsoffsetfilterssort_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.

Parameterstablerequiredfilterssold_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).

Parametersbytablerequiredfilterssold_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.

Parameterslot_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.

Parametersbrandquerycategory

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).

Parameterslimit

Version history

2
  1. v0.4.7LatestOct 26, 2026
  2. v0.4.6Oct 25, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listed15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts