MCP Directory

How to add Ramp MCP Server to Windsurf

Retrieve and analyze Ramp finance data (transactions, bills, reimbursements) via an in-memory SQLite ETL pipeline. Paste the config into ~/.codeium/windsurf/mcp_config.json and restart Windsurf.

Last updated June 14, 2026 · 34 · stdio · apikey

Windsurf config for Ramp MCP Server

git clone git@github.com:ramp/ramp-mcp.git
{
  "mcpServers": {
    "ramp-mcp-server": {
      "command": "uv",
      "args": [
        "--directory",
        "/<ABSOLUTE-PATH-TO>/ramp-mcp",
        "run",
        "ramp-mcp",
        "-s",
        "transactions:read,reimbursements:read"
      ],
      "env": {
        "RAMP_CLIENT_ID": "<CLIENT_ID>",
        "RAMP_CLIENT_SECRET": "<CLIENT_SECRET>",
        "RAMP_ENV": "<demo|qa|prd>"
      }
    }
  }
}

Setup steps

  1. 1Open Windsurf → Cascade → the hammer/MCP icon → Configure (or edit ~/.codeium/windsurf/mcp_config.json).
  2. 2Paste the Ramp MCP Server config below.
  3. 3Fill in placeholder secrets, then save.
  4. 4Click Refresh in the MCP panel.
  5. 5Ramp MCP Server's tools become available to Cascade.

Before you start

  • A Ramp account with Developer API access (create a client under Profile > Developer > Create app)
  • A Ramp client ID and secret with client credentials enabled and the desired scopes granted
  • uv (Astral) installed
  • The repository cloned locally (run via uv --directory)

What Ramp MCP Server can do in Windsurf

process_data

Set up and process data into the ephemeral in-memory SQLite database for analysis.

execute_query

Run a SQL query against the ephemeral in-memory database.

clear_table

Delete/clear a table from the ephemeral in-memory database.

get_ramp_categories

Fetch Ramp expense categories directly.

get_currencies

Fetch supported currencies directly.

load_transactions

Load transactions into the database (requires transactions:read scope).

load_reimbursements

Load reimbursements into the database (requires reimbursements:read scope).

load_bills

Load bills into the database (requires bills:read scope).

Security

Uses Ramp Developer API client-credentials auth: set RAMP_CLIENT_ID and RAMP_CLIENT_SECRET in the config env. Grant only the OAuth scopes you need on the Ramp client and pass the matching comma-separated scopes via the -s flag. Defaults to the demo environment (RAMP_ENV=demo); set RAMP_ENV=prd to operate on real production financial data.

Ramp MCP Server + Windsurf FAQ

Where is the Windsurf config file?

Windsurf reads MCP servers from ~/.codeium/windsurf/mcp_config.json. Paste the Ramp MCP Server config there under the "mcpServers" key and restart the client.

Is Ramp MCP Server safe to use with Windsurf?

Uses Ramp Developer API client-credentials auth: set RAMP_CLIENT_ID and RAMP_CLIENT_SECRET in the config env. Grant only the OAuth scopes you need on the Ramp client and pass the matching comma-separated scopes via the -s flag. Defaults to the demo environment (RAMP_ENV=demo); set RAMP_ENV=prd to operate on real production financial data.

Does it hit my real Ramp data by default?

No. All requests go to the demo environment by default. Set RAMP_ENV=prd to use production data.

How does it handle large datasets?

It uses an ETL pipeline into an ephemeral in-memory SQLite database so the LLM can query with SQL instead of loading everything into context. Very large datasets may still be unprocessable due to API/client limits; prompt the model to avoid the REPL and keep responses concise to avoid timeouts.

Why do some load tools fail?

Each load tool requires a specific Ramp OAuth scope (e.g. transactions:read). Enable the scope on your Ramp client and include it in the comma-separated -s CLI argument when starting the server.

View repo Full Ramp MCP Server page