Quasar Markets Join free

MCP server

Connect Claude Desktop, Cursor, or your own agent to Quasar Markets data.

Overview

The Quasar Markets MCP server exposes our financial research tools to AI assistants and your own agents over the Model Context Protocol. Point a client at the endpoint below, authenticate with a personal API key, and the tools appear alongside the rest of your assistant’s capabilities.

The server speaks JSON-RPC 2.0 over Streamable HTTP. Requests are POST only; responses are returned as a text/event-stream, with the JSON payload on the data line.

Endpoint

https://ai-api.quasarmarkets.com/mcp

Every request carries a bearer token: either a personal MCP API key beginning QM_MCP_, or your Quasar user token. Keys belong to the environment that issued them — a key created in one environment is rejected by another.

Quickstart

Create a key in the Quasar app under Profile → MCP, then copy it. The key is shown in full and can be rotated or deleted at any time.

Ask the server what it can do. This returns every tool with its input schema:

List the tools

curl 'https://ai-api.quasarmarkets.com/mcp' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -H 'Authorization: Bearer QM_MCP_your_key_here' \
  --data '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/list",
    "params": {}
  }'

Then call one. Most tools take their arguments inside a payload object — the example on each tool below shows the exact shape that tool expects.

Call a tool

curl 'https://ai-api.quasarmarkets.com/mcp' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -H 'Authorization: Bearer QM_MCP_your_key_here' \
  --data '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/call",
    "params": {
      "name": "quasar_list_data_sources",
      "arguments": {}
    }
  }'

Connect a client

Claude Desktop reads its server list from claude_desktop_config.json. Add the entry below and restart the app.

Claude Desktop

{
  "mcpServers": {
    "quasar-markets": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://ai-api.quasarmarkets.com/mcp",
        "--header",
        "Authorization: Bearer QM_MCP_your_key_here"
      ]
    }
  }
}

From Python, the FastMCP client connects with the key as its auth argument.

Python

import asyncio
from fastmcp import Client

async def run():
    async with Client("https://ai-api.quasarmarkets.com/mcp", auth="QM_MCP_your_key_here") as client:
        tools = await client.list_tools()
        print(f"{len(tools)} tools available")

asyncio.run(run())

Tool reference

12 tools, read live from the server. Catalogue version 1.0.0.

Source Catalog

Public data-source registry metadata; no AI generation or user records.

quasar_list_data_sources

List Data Sources

List active Quasar data sources available to the user.

FieldTypeDescription
flatbooleanReturn every active registry entry with its parent ID. Registry membership does not grant raw-data access.

required

Example request

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "quasar_list_data_sources",
    "arguments": {}
  }
}
Example response
{
  "detail": null,
  "data": [
    {
      "id": 1,
      "name": "Nasdaq",
      "description": "Real-time and fundamental market data."
    },
    {
      "id": 2,
      "name": "SEC Filings",
      "description": "10-K, 10-Q, 8-K filings."
    },
    {
      "id": 3,
      "name": "FRED Economic Data",
      "description": "Macroeconomic indicators."
    }
  ]
}

Nasdaq Data Link

Fundamental financials, statements, metadata, and read-only SQL queries.

quasar_nasdaq_get_stock_fundamentals

Get Stock Fundamentals

Fetch income statement, balance sheet, cash flow, and financial ratios for a ticker.

FieldTypeDescription
symbol*stringTicker symbol
limitintegerRecords per statement (1-25)

required

Example request

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "quasar_nasdaq_get_stock_fundamentals",
    "arguments": {
      "payload": {
        "symbol": "AAPL",
        "limit": 3
      }
    }
  }
}
Example response
{
  "detail": null,
  "data": {
    "symbol": "AAPL",
    "results": {
      "income_statement": [
        {
          "ticker": "AAPL",
          "revenue": 85777000000
        }
      ]
    }
  }
}

quasar_nasdaq_query_sql

Query Nasdaq SQL

Run restricted read-only SQL (SELECT/WITH) against allowlisted tables with auto limit 100.

FieldTypeDescription
sql*stringRead-only SQL statement

required

Example request

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "quasar_nasdaq_query_sql",
    "arguments": {
      "payload": {
        "sql": "SELECT ticker, calendardate, revenue FROM ndaq_is WHERE ticker = 'AAPL' LIMIT 5"
      }
    }
  }
}
Example response
{
  "detail": null,
  "data": [
    {
      "ticker": "AAPL",
      "calendardate": "2024-06-30",
      "revenue": 85777000000
    }
  ]
}

quasar_nasdaq_get_table_metadata

Get Table Metadata

Get column descriptions and types for an allowed Nasdaq table.

FieldTypeDescription
table_name*stringAllowed table name (e.g. ndaq_is)

required

Example request

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "quasar_nasdaq_get_table_metadata",
    "arguments": {
      "payload": {
        "table_name": "ndaq_is"
      }
    }
  }
}
Example response
{
  "detail": null,
  "data": {
    "table": "NDAQ_IS",
    "columns": [
      {
        "name": "revenue",
        "type": "numeric"
      }
    ]
  }
}

quasar_nasdaq_search_data_providers

Search Data Providers

Search Nasdaq Data Link providers and dataset catalogs.

FieldTypeDescription
query*stringSearch keyword

required

Example request

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "quasar_nasdaq_search_data_providers",
    "arguments": {
      "payload": {
        "query": "crypto"
      }
    }
  }
}
Example response
{
  "detail": null,
  "data": [
    {
      "provider_code": "NDAQ_CRYPTO",
      "name": "Crypto Indices"
    }
  ]
}

quasar_nasdaq_discover_available_data

Discover Available Data

Discover all allowed Nasdaq Data Link tables.

This tool takes no arguments.

Example request

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "quasar_nasdaq_discover_available_data",
    "arguments": {}
  }
}
Example response
{
  "detail": null,
  "data": {
    "available_tables": [
      "ndaq_bs",
      "ndaq_cf",
      "ndaq_fd",
      "ndaq_is",
      "ndaq_stat"
    ]
  }
}

Structured Data

Retrieve observations; the client AI writes the answer. No Quasar LLM calls.

quasar_query_source

Query a Data Source

Read an explicit FRED, Edgar or backend source operation using the resource catalog parameters and field limitations.

FieldTypeDescription
payload*objectA catalog operation with bounded scalar parameters, never a raw query.

required

Example request

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "quasar_query_source",
    "arguments": {
      "payload": {
        "source": "fred",
        "operation": "observations",
        "parameters": {
          "series_id": "UNRATE"
        },
        "limit": 12
      }
    }
  }
}

quasar_list_data_resources

List Queryable Data Resources

Discover supported resource IDs, series and parameter schemas, with coverage limitations.

This tool takes no arguments.

Example request

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "quasar_list_data_resources",
    "arguments": {}
  }
}

quasar_query_data

Query Structured Data

Fetch a catalog series without Quasar AI generation. Unsupported requests fail without fallback.

FieldTypeDescription
payload*objectExplicit catalog selection; no natural-language or arbitrary URL execution.

required

Example request

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "quasar_query_data",
    "arguments": {
      "payload": {
        "resource": "fred",
        "series_id": "fred:unrate",
        "limit": 12
      }
    }
  }
}

quasar_search_sources

Search Sources

Find sources using provider names and subject keywords.

FieldTypeDescription
payload*object

required

Example request

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "quasar_search_sources",
    "arguments": {
      "payload": {
        "query": "unemployment"
      }
    }
  }
}

quasar_describe_source

Describe Source

Read exact operation schemas, supported entity lookups and coverage limits.

FieldTypeDescription
payload*object

required

Example request

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "quasar_describe_source",
    "arguments": {
      "payload": {
        "source": "edgar"
      }
    }
  }
}

quasar_search_source_entities

Search Source Entities

Resolve names and metrics into candidate identifiers; clarify ambiguity before querying.

FieldTypeDescription
payload*object

required

Example request

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "quasar_search_source_entities",
    "arguments": {
      "payload": {
        "source": "edgar",
        "kind": "companies",
        "query": "Apple"
      }
    }
  }
}

Errors

401The key is missing, expired, or belongs to a different environment. Create or rotate a key in Profile → MCP.
403An administrator has switched MCP access off for the account. Contact support.
405The endpoint accepts POST only. A GET request is rejected.
200 with isErrorThe request was valid but the tool itself failed. The reason is in the result content; validation problems name the field that was wrong.