← Registry

Productivity

quadratichq.com

Authenticate and manage Quadratic spreadsheets and files.

1 endpoint5 known toolsFirst detected May 29, 2026Last detected July 25, 2026

ENDPOINT 1

https://mcp.quadratichq.com/mcp

No auth detected

MCP server metadata

Name
rmcp
Version
1.4.0
Capabilities
tools
Server instructions

# Using the Quadratic tools The file summary returned when a file is opened already includes sample rows for every table. Consult that summary before calling read tools; fetch full data only when the sample is insufficient for the task. ## Efficiency - Consolidate reads: pass comma-separated ranges to get_cell_data rather than making multiple calls. - Issue independent tool calls in parallel; only sequence them when one result feeds the next. - read_data supports action "batch" to run multiple reads in parallel; write_data supports action "batch" to run multiple writes sequentially. Batches inherit the parent tool's permission hint. ## Code cells Code cells are not global — variables and imports declared in one cell are not visible in another. Use print() (Python) or console.log() (JavaScript) to inspect intermediate values. Formatting is applied with the formatting tools, not from code. ## Formulas vs. code Formulas are included in the file-summary sample data. To read formulas beyond the sample, use get_cell_data. To write a formula, use set_formula_cell_value. get_code_cell_value is only for Python, JavaScript, and connection code — it does not return formula cell contents. ## Placement Writing cells, tables, or code over an existing range produces a spill error. When a write reports a spill, use move_cells to relocate the new content with at least one empty cell between it and the existing range. # Quadratic Docs Quadratic is a modern AI-enabled spreadsheet combining formulas with Python, SQL, and JavaScript. ## File and Data Support Import: Drag and drop csv, excel, or parquet files into the sheet or import via file menu. SQL connects to databases. Export: Highlight data > right-click > "Download as CSV" or File > Download > choose format (.grid, .xlsx, .csv) PDFs and images: Attach via AI chat paperclip button, paste, or drag into chat. ## Code in Quadratic Insert code via AI or press `/` in a cell. Double-click or press `/` to edit existing code cells. Code cells are not global - variables and imports must be defined in each cell. Output data can be referenced by other cells. Formatting is done via AI or toolbar, not code. IMPORTANT: Prefer Formulas over Python and JavaScript. Only use Python or JavaScript when the functionality is not available in Formulas (e.g. charts, machine learning, complex data transforms, or web/API requests). ## Tables in Quadratic Prefer plain cell values over data tables. Only create a data table when the user explicitly asks for one, or when working within a file that already uses data tables. When you lay out tabular data as plain cells, you MUST style the header row so it reads as a header — plain cells don't auto-style headers the way data tables do. Writing the values and styling the header are a single paired operation: in the SAME response/tool batch as the set_cell_values call, also call set_text_formats on the header row — always make it bold, and also apply a fill color and a bottom border so the header is clearly distinct from the data below. NEVER defer header formatting to a later step or wait to be prompted to continue; treat it as part of creating the table, not an optional finishing touch. Do this every time you write a plain-cell table. Editable tables (imported tables and value-based tables you can type into) DO support single-cell Formulas and Code (Python/JavaScript) directly inside their data cells. Such a cell is stored as a single-cell code cell that computes a 1x1 result shown in place — it does not create a separate table and has no table name or column header of its own. It recomputes when its dependencies change, can be referenced by other cells, and travels with its row when the table is sorted. Code-output tables (the table produced by a Python/JavaScript/Formula that returns an array or table) and charts are read-only: you cannot place Formulas or Code in their cells, nor in any table's name or column-header rows. To compute over a code-output table, reference its data from cells outside the table. ## Placing Content NEVER place cells, tables, code, or connections over existing content. Before placing new data: 1. Check existing data ranges from context provided 2. Place new content outside those ranges (to the right or below, whichever makes sense given the context) 3. Leave one cell of space between old and new data ## Formatting Values Use spreadsheet values: enter 0.01 if trying to do 1% so you can format it and view it as 1% (formatting as % shows 1%). Emojis are supported. ## Numeric Precision Round generated and computed numbers to at most 2 decimal places before writing them to the sheet or a chart. This keeps tables clean and removes floating-point noise like 0.5999999999999999. Round the stored value, not just its display: `round(x, 2)` in Python, `Math.round(x * 100) / 100` in JavaScript, `ROUND(x, 2)` in formulas. For fractions shown as percentages, round the fraction to 4 places so the percentage still shows 2 decimals (e.g. 0.0570 → 5.70%). Keep more precision only when accuracy requires it — stock or financial prices, scientific or statistical data, sub-cent currency, IDs, or values the user asks to keep exact. ## Spills When code, tables, or charts expand and overlap existing content creating a spill error, use the move_cells tool to relocate with sufficient space to avoid creating another spill. # A1 Docs Cell references in Quadratic are in A1 notation. ## Rectangular Ranges Rectangular ranges are references to a range of cells in a sheet. They are referenced by the top left cell and the bottom right cell. For example, A1:C3 is a rectangular range that references the cells A1, B1, C1, A2, B2, C2, A3, B3, and C3. ### Rectangular Range Examples - D5 - references the cell D5 - A1:C3 - references the cells A1, B1, C1, A2, B2, C2, A3, B3, and C3 - A1:A3 - references the cells A1, A2, and A3 - A1:C1 - references the cells A1, B1, and C1 ## Column and Row References In A1 notation, when referencing an entire column or row, use the column or row name(s). **IMPORTANT**: Column and row references like `A` or `A3:A` should only be used for non-table data. When referencing columns within tables, ALWAYS use table column references like `Table_Name[Column Name]` instead of column references like `A` or infinite ranges like `A3:A`. ### Column and Row Examples - B - references the entire column B (use only for non-table data) - B3:B - references all rows in column B starting from row 3 (use only for non-table data) - 10 - references the entire row 10 - C4:C - references all columns in row C starting from row 4 - D2:2 - references all columns in row 2 starting from column D ## Table References **PREFERRED**: Always use table names (e.g., Table_Name) when working with entire tables or entire columns within tables. Use A1 notation only for non-table data or partial table selections. **IMPORTANT for Formatting and Conditional Formatting**: When applying formatting or conditional formatting to table columns, ALWAYS use table column references like `Table_Name[Column Name]` instead of A1 range notation like `A2:A2000`, column references like `A`, or infinite ranges like `A3:A`. This ensures the formatting applies correctly to the entire column as the table grows or shrinks. Columns within tables may be referenced by their name in A1 notation, eg, Table1[Column Name]. To reference multiple columns within a table, you use Table1[[Name]:[Address]]. In tables, you can also reference parts of the table. If you only want the table names, you can reference it with Table1[#HEADERS]. If you want the data and the headers, you would use Table1[[#DATA],[#HEADERS]]. By default, tables are referenced as Table1[#DATA]. If you need individual cells within a table, you need to use normal A1 reference. For example, if you want the first row of a table, you would reference it using its corresponding A1 reference. Remember that tables usually include a name row as the first row, and a column header row as the second row. (Although these may sometimes be hidden.) ### Table Examples - Table1 - references the entire table's data - Table1[#HEADERS] - references the table headers - Table1[[#DATA],[#HEADERS]] - references the entire table including the headers - Table1[Column 2] - references a single column within Table1 - Table1[[Name]:[Address]] - references a range of columns ## Multiple Ranges You can reference multiple ranges by combining ranges with commas. ### Multiple Range Examples - A1:C3,D5:F7 - A1:C3,D5:F7,G9:I11 - Table1[Column 2], A1:C3 ## Other Sheets You can reference cells in other sheets by using the sheet name as part of the reference. Note, table names do not need sheet names as table names are unique within the file. ### Other Sheet Examples - Sheet1!A1:C3 - Sheet1!A1:C3,Sheet2!D5:F7 - Sheet1!A1:C3,Sheet2!D5:F7,Sheet3!G9:I11 - Table1[Column 2],Sheet2!A1:C3 # Available Languages Default to Formulas. Use Formulas whenever they can accomplish the task, and only reach for Python or JavaScript when the functionality is not available in Formulas (e.g. charts, machine learning, complex data transforms, or web/API requests). - **Formulas**: The default choice. Calculations, lookups, aggregations, cell references, conditional logic, text manipulation, and anything expressible with spreadsheet functions. - **Python**: Use only when Formulas can't do it — analysis, transforms, ML, visualizations. pandas, numpy, Plotly charts. Reference data with q.cells(). - **JavaScript**: Use only when Formulas can't do it and the user prefers JavaScript. Chart.js charts. Reference data with q.cells(). - **SQL Connections**: Query external databases (Postgres, MySQL, etc.). - **Agent Connections**: Call third-party REST APIs (Stripe, HubSpot, etc.) from Python/JavaScript fetch code, referencing team secrets as {{SECRET_NAME}} placeholders. - **Financial data**: For basic historical stock prices, use the STOCKHISTORY formula (unadjusted OHLCV). Use Python with q.financial only for data not available as a formula — adjusted prices, financial statements, dividends, splits, real-time/intraday prices, technical indicators, or economic data. For detailed documentation on any action or topic, use the context action on the read_data or write_data tool. Multiple items may be requested in one call: action "context", params {"actions": ["a","b"], "topics": ["python"]}. Singular forms are also accepted: {"action": "<name>"}, {"topic": "<name>"}. Topics: python, javascript, formula, connection, validation. Quadratic files have a public URL of the form https://app.quadratichq.com/file/<uuid>.

Known tools 5

auth

Authenticate the MCP session with Quadratic.

Inferred read-only
files_read

Read-only file metadata operations on Quadratic files the user has access to.

Inferred read-only
files_write

File management operations that create or modify state: create a new file, open an existing file to start an editing session, or close a session.

Potential side effects
read_data

Read-only queries on the open spreadsheet.

Inferred read-only
write_data

Write operations on the open spreadsheet.

Potential side effects

CONNECT WITH APPROVAL

Client installation

Review this server and its permissions before adding it. Secret placeholders must be set locally.

Codex

~/.codex/config.toml

[mcp_servers.rmcp]
url = "https://mcp.quadratichq.com/mcp"
enabled = true
Claude Code

.mcp.json

{
  "mcpServers": {
    "rmcp": {
      "type": "http",
      "url": "https://mcp.quadratichq.com/mcp"
    }
  }
}
Claude Desktop

Settings → Connectors → Add custom connector

Name: rmcp
Remote MCP URL: https://mcp.quadratichq.com/mcp

Add this remote URL as a custom connector in Claude Desktop. Availability depends on the user plan and workspace policy.

Cursor

.cursor/mcp.json

{
  "mcpServers": {
    "rmcp": {
      "url": "https://mcp.quadratichq.com/mcp"
    }
  }
}
Visual Studio Code

.vscode/mcp.json

Add to Visual Studio Code
{
  "servers": {
    "rmcp": {
      "type": "http",
      "url": "https://mcp.quadratichq.com/mcp"
    }
  }
}
Generic MCP

Client-specific MCP configuration

{
  "name": "rmcp",
  "transport": "streamable-http",
  "url": "https://mcp.quadratichq.com/mcp"
}
MCP Inspector

Run the official MCP Inspector locally and enter the indexed Streamable HTTP endpoint.

TRUST AND VERIFICATION EVIDENCE

Loading Trust v2 evidence…

Checking the associated registrable domain. The BuiltWith key remains server-side.

Indexed

Evidence is source-attributed and does not guarantee that a third-party server is safe. Risk labels are conservative metadata heuristics.