View Categories

How to Connect Oracle Database to Claude / Cursor via MCP (Oracle MCP Server Setup)

24 min read

MCP SERVER ORACLE DATABASE

Query Oracle Database with Claude or Cursor via MCP.

Connect Oracle Database — on-prem, RAC, Exadata, Autonomous, or 19c — to Claude or Cursor with one MCP key. Schema Intelligence handles PL/SQL dialects so the AI writes valid Oracle SQL on its first try, over a secure outbound-only cloud link with no port forwarding.

No firewall holes One key, every connector Live data, no cache lag Bring your own AI tool

Query Streams is a secure, real-time data integration platform that brings every database and SaaS API in your account into Claude, Cursor, ChatGPT, and Grok — through a single MCP key with no firewall changes. This guide walks through wiring up the Oracle MCP connector specifically, so your AI tool can answer plain-English questions about employees, departments, orders, financials, and any other Oracle Database data — joins, aggregations, PL/SQL dialect-specific syntax, schema exploration, ad-hoc reporting — without you copy-pasting CSV exports out of SQL Developer, Toad, or SQL*Plus. Whether you’re running Oracle 19c on-prem, Oracle Autonomous Database in OCI, Oracle XE on a developer workstation, or a RAC cluster on Exadata, the Oracle MCP server connects them all to your AI client through one key. Learn more at QueryStreams.com and sign up for free to start asking your AI tool real Oracle questions.

What Query Streams MCP gives you for Oracle Database

Other “Oracle MCP” servers on the open-source landscape connect the AI tool directly to an Oracle TNS connection string. That works, but it pushes a database password (and often a wallet) into your AI client’s config, scopes the AI tool to only that one Oracle endpoint, and gives you no audit trail of what the AI actually asked. The Query Streams MCP server for Oracle solves a wider problem: one key, every connector, full audit trail, and the AI tool never holds your Oracle credentials.

Zero inbound firewall holes

The Network Agent opens a single outbound encrypted cloud link to Query Streams. Your AI client connects to the cloud, never to your Oracle host. No port to open, no IP to allowlist, no VPN, no Oracle TNS listener exposed to the public internet.

One key, every connector

The same MCP key reaches every database and SaaS API your account has connected. Add a Stripe or PostgreSQL connector tomorrow and the AI tool sees it next to your Oracle schemas without re-keying.

Schema Intelligence baked in

The AI sees AI-curated descriptions, semantic types, enum value lists, and confidence-scored foreign keys for every Oracle column — not just bare ALL_TAB_COLUMNS output. It writes accurate Oracle SQL on the first try, even on legacy schemas with the 30-character column-name truncations of pre-12c databases.

Read-only enforced at the agent

Even a hallucinating LLM can’t issue DELETE, UPDATE, or TRUNCATE through Query Streams MCP. The Network Agent rejects anything that isn’t SELECT, WITH, or EXPLAIN before Oracle ever sees the SQL.

Per-key rate limits

Default 60 requests per minute and 10 execute calls per minute, configurable per key. A runaway AI tool-call loop hits a token bucket, not your Oracle session limit or your Autonomous Database OCPU bill.

How it works without opening firewall ports

The Network Agent installs once on any host that can reach your Oracle Database over Oracle Net Services (TNS) and dials a single outbound TLS link to the cloud — nothing inbound is ever exposed, and the AI tool never sees your Oracle TNS connection string or wallet. how the outbound-only connection works →

AI Client

Cursor, Claude,
ChatGPT, Grok

QS MCP Server

Streamable HTTP
X-MCP-Key auth

Network Agent

On your network
Cloud link out

Oracle Database

TNS / wallet held
by the agent

No inbound port required — the agent dials out, never the other way around

The MCP key you give Cursor or Claude is scoped (read / analyze / execute), revocable at any time, and rate-limited per-key. The AI tool calls these MCP tools to do its work:

querystreams-mcp · tool catalog
qs_list_organizationsread
Returns the org bound to the calling key.
qs_list_agentsread
Lists Network Agents and online state.
qs_list_connectorsread
Lists data connectors (one entry per database server or API).
qs_get_connector_schemaread
Returns the Oracle schemas, tables, and columns the AI can query, with Schema Intelligence enrichment when available.
qs_profile_tableanalyze
Sample values, distributions, enum detection, semantic types — on demand.
qs_list_saved_queriesread
Pre-built parameterized SQL templates the team trusts. The AI runs them without ever seeing the SQL.
qs_run_saved_queryexecute
Executes a saved query by pattern_key with optional parameter overrides.
qs_run_queryexecute
Executes a SELECT against a connector. Read-only validator runs at the agent, before Oracle sees the SQL.

Why Schema Intelligence makes Query Streams MCP different

Most “MCP for Oracle” servers in the open-source landscape hand your AI tool the same ALL_TAB_COLUMNS view Oracle hands a stranger. Column names. Data types. Maybe a primary key. The LLM is left to guess what STATUS_CD = 'A' means, what EMP_NM_TXT actually stores, or which of two JOB_ID columns is the right one to join on (and whether the 30-character pre-12c column-name truncations changed the meaning). That’s why the first SQL most LLMs write against a bare Oracle schema is wrong — not because the LLM is bad, but because it doesn’t have the data it needs to be right, and Oracle’s data dictionary is dense.

Query Streams MCP returns that same schema enriched with what we call Schema Intelligence (SI) — AI-curated metadata that’s generated by running profiling queries against your actual Oracle data before the AI client ever asks. When SI is enabled on a connector and database, every schema tool the AI calls (qs_get_connector_schema, qs_get_table_schema, qs_profile_table, qs_get_relationships) returns the bare schema plus six layers of curated knowledge. The LLM stops guessing.

To make this concrete, here is what the AI client gets back from a single qs_get_table_schema call against a typical Oracle HR-style schema (employees, departments, jobs, locations, job_history) — first without Schema Intelligence, then with it.

Without Schema Intelligence data_source: captured_schema
// what the LLM sees == TABLE: hr.employees == – employee_id NUMBER(6) [PK, NOT NULL] – last_name VARCHAR2(25) NOT NULL – email VARCHAR2(25) NOT NULL – hire_date DATE NOT NULL – job_id VARCHAR2(10) NOT NULL – salary NUMBER(8,2) – commission_pct NUMBER(2,2) – manager_id NUMBER(6) – department_id NUMBER(4) == TABLE: hr.departments == – department_id NUMBER(4) [PK] – department_name VARCHAR2(30) NOT NULL – location_id NUMBER(4) == TABLE: hr.jobs == – job_id VARCHAR2(10) [PK] – job_title VARCHAR2(35) NOT NULL – min_salary NUMBER(6) – max_salary NUMBER(6) == TABLE: hr.locations == – location_id NUMBER(4) [PK] – city VARCHAR2(30) NOT NULL – country_id CHAR(2) Foreign Keys (declared, no enrichment): employees.department_id -> departments.department_id employees.job_id -> jobs.job_id departments.location_id -> locations.location_id si_recommendation: state: “not_run” what_youre_missing_for_this_call: – Per-column sample values + enum detection – Table and column descriptions – Semantic type classifications – Business domain tagging – Nullable-percentage stats for commission_pct note: “types and PK/FKs only, no semantic context”
With Schema Intelligence data_source: schema_intelligence
// what the LLM sees == TABLE: hr.employees [FACT, domain:hr] == “One row per employee, current and historical. salary is annual base in USD; total comp = salary * (1 + NVL(commission_pct, 0)).” – employee_id NUMBER(6) [PK] identifier – last_name VARCHAR2(25) person_name – email VARCHAR2(25) email (login prefix) Sample: SKING, NKOCHHAR, LDEHAAN – hire_date DATE date_iso Range: 1987-06-17 – 2025-04-21 – job_id VARCHAR2(10) status_code (enum) IT_PROG (16%) | SA_REP (12%) | ST_CLERK (10%) | … FK -> jobs.job_id (100% overlap, conf 0.99) – salary NUMBER(8,2) currency Range: 2,100.00 – 24,000.00 · mean 6,461.83 – commission_pct NUMBER(2,2) percentage (nullable, 65% null) Range: 0.10 – 0.40 (sales staff only) – manager_id NUMBER(6) identifier FK -> employees.employee_id (self-ref) – department_id NUMBER(4) identifier FK -> departments.department_id (conf 0.99) == TABLE: hr.departments [DIM, domain:hr] == – department_name VARCHAR2(30) status_code (enum) Sample: Sales, IT, Marketing, Finance, Human Resources == TABLE: hr.jobs [LOOKUP, domain:hr] == “Job catalog. min_salary/max_salary define the band for each job_id.” – job_title VARCHAR2(35) text_content – min_salary NUMBER(6) currency – max_salary NUMBER(6) currency == TABLE: hr.locations [DIM, domain:hr] == – city VARCHAR2(30) geo_city Sample: Seattle, Toronto, London, Tokyo, Munich – country_id CHAR(2) geo_country_code

The six layers Schema Intelligence adds

Each layer addresses a class of question the LLM would otherwise guess at. The opt-in SI profiling pass runs read-only against your Oracle data without changing your schema. what Schema Intelligence adds and how it stays current →

AI-curated descriptions

Plain-English purpose for every schema, table, and column — generated once, refreshed when your Oracle schema changes. Confidence-scored; user-authored descriptions always win.

employees: “One row per employee,
current and historical.”

Table classifications

Each table tagged FACT (transactional events), DIM (descriptive reference), or LOOKUP (small code maps), plus a business domain — hr, sales, finance, support, and 15 more.

employees [FACT, domain:hr]
jobs [LOOKUP, domain:hr]

Semantic types per column

Eighteen types — currency, email, date_iso, status_code, percentage, ranking_position, identifier, url, person_name, and more. The AI generates dialect-correct Oracle SQL (SYSDATE, NVL, FETCH FIRST n ROWS ONLY) appropriate to each type.

salary: currency · email: email
commission_pct: percentage

Sample values from real data

Random rows surfaced to the LLM so it recognises patterns no Oracle schema can show — formatting conventions, encoded VARCHAR2 values, naming styles, and the actual shape of your strings.

email: [‘SKING’, ‘NKOCHHAR’,
‘LDEHAAN’, ‘AHUNOLD’]

Enum detection with distributions

Low-cardinality columns (50 or fewer distinct values, at most 5% of rows unique) mapped to their full value list with row counts. The AI never guesses Oracle casing or job-code spelling.

job_id: IT_PROG (16%) | SA_REP (12%)
| ST_CLERK (10%) | …

Implicit foreign-key discovery

Cross-table data overlap analysis finds joins that aren’t declared as DDL constraints (and confirms the ones that are). Stored alongside formal Oracle FKs with confidence scores, returned by qs_get_relationships.

employees.department_id ->
departments.department_id (conf 0.99)

Same prompt, different SQL

The proof is in the SQL the AI tool actually writes. Same Cursor session, same Claude model, same prompt — “Show me the top 5 highest-paid employees who joined in the last year, including their total compensation and department.” Without Schema Intelligence the LLM guesses with PostgreSQL-flavored syntax that Oracle rejects. With it, the LLM knows the dialect.

Without Schema Intelligence
— LLM’s first attempt against bare schema: SELECT employee_id, last_name, salary, salary + (salary * commission_pct) AS total_comp FROM employees WHERE hire_date >= ‘2025-05-06’ ORDER BY salary DESC LIMIT 5 ORA-00933: SQL command not properly ended LIMIT is PostgreSQL/MySQL, not Oracle “employees” not qualified — ambiguous schema commission_pct ignored as nullable — NULL pollutes total_comp hardcoded date — “last year” is dynamic no JOIN to departments — prompt asked for it
With Schema Intelligence
— LLM’s first attempt with SI enabled: SELECT e.employee_id, e.last_name, e.salary, e.salary * (1 + NVL(e.commission_pct, 0)) AS total_comp, d.department_name FROM hr.employees e JOIN hr.departments d ON d.department_id = e.department_id WHERE e.hire_date >= ADD_MONTHS(SYSDATE, –12) ORDER BY e.salary DESC FETCH FIRST 5 ROWS ONLY 5 rows. Correct first try. FACT/DIM tags guided the join to departments FK enrichment confirmed department_id link commission_pct flagged as nullable — NVL applied hire_date saw semantic type = date_iso -> ADD_MONTHS Oracle 12c+ FETCH FIRST n ROWS ONLY hr. schema qualifier from connector metadata
Don’t want to run Schema Intelligence? MCP still works — schema tools return bare metadata (types, primary keys, formal foreign keys, indexes) and every degraded response carries an si_recommendation block telling the AI what it’s missing, including a one-call option to enable SI mid-conversation via qs_request_si_analysis. how Schema Intelligence runs and how long it takes →
Nova AI

MCP not for you? Try Nova AI instead.

Skip the JSON config entirely: Nova AI is built into the Query Streams web portal and asks the same plain-English questions against your Oracle connector — same agent, same read-only enforcement, same Schema Intelligence, no MCP plumbing.

Meet Nova AI

Prerequisites

Before you start, make sure you have:

  1. A free Query Streams account at my.querystreams.com.
  2. The Query Streams Network Agent installed on a machine that can reach your Oracle Database — see Download the Query Streams Agent.
  3. An Oracle connector configured against the agent — see the existing connector setup guides for the TNS connection string. The agent holds the Oracle user password (or wallet, Kerberos, or directory-service credentials); the AI tool never touches them.
  4. Any MCP-capable AI client. We’ll show Cursor, Claude Desktop, ChatGPT, and Grok in this guide; if you use Windsurf, Zed, Continue, Cline, VS Code Copilot, Codex, or Goose, the config block is essentially the same.
  5. Five minutes.
You only set up the agent once. The same agent that powers Query Streams’ Excel and Google Sheets add-ons, the web Query Builder, and Nova AI also serves MCP. Adding MCP to an existing Query Streams account is just generating a key — the agent and Oracle Database connector are already running.
1

Generate an MCP key

From the /mcp page in Query Streams, mint a key with the scopes you want.

2

Drop it into your AI client

One JSON snippet for Cursor, Claude, ChatGPT, or Grok. Same key everywhere.

3

Ask a question

“What’s our average employee tenure by department?” — the AI calls the right tools, you get the answer.

Step 1: Generate an MCP key in Query Streams

Sign in to Query Streams and open the MCP page (or sign in first at my.querystreams.com and click MCP in the left navigation). Click Generate key, give the key a recognizable name (something like cursor-laptop or claude-desktop), and pick the scopes you want this key to have:

  • read — the AI can browse connectors and read schema. Required for everything else.
  • analyze — the AI can profile tables and discover relationships (sample values, distributions, semantic types). Optional but strongly recommended for Oracle work, where understanding the shape of your data matters when the LLM is generating joins across legacy schemas.
  • execute — the AI can actually run SQL. Without this, the AI is read-only against schema metadata only.

For a typical “let Claude analyse my Oracle data” workflow, all three scopes are appropriate. For a key you’re handing to a teammate or a less-trusted client, drop execute and let them browse only. You can revoke any key at any time from the same page; the AI client will see MCP_KEY_REVOKED on its next call and stop working immediately. There’s no propagation delay.

Copy the key now — Query Streams shows it once, then stores only a hash. If you lose it, generate a new one. The key looks like qsmcp_ followed by 48 random characters and is what your AI client sends in the X-MCP-Key request header.

Step 2: Add Query Streams MCP to your AI client

The configuration is the same shape across every MCP-capable client — an MCP server entry pointing at https://mcp.querystreams.com with your key in the X-MCP-Key header. Pick your client below.

Cursor
Cursor ~/.cursor/mcp.json
// Edit ~/.cursor/mcp.json
{
  "mcpServers": {
    "querystreams": {
      "url": "https://mcp.querystreams.com",
      "headers": {
        "X-MCP-Key": "qsmcp_PASTE_KEY_HERE"
      }
    }
  }
}
Claude Desktop
Claude Desktop claude_desktop_config.json
// Settings → Developer → Edit Config
{
  "mcpServers": {
    "querystreams": {
      "url": "https://mcp.querystreams.com",
      "headers": {
        "X-MCP-Key": "qsmcp_PASTE_KEY_HERE"
      }
    }
  }
}
ChatGPT
ChatGPT Apps & Connectors
// Settings → Apps & Connectors → Add MCP
Server URL  https://mcp.querystreams.com
Auth header X-MCP-Key
Header value qsmcp_PASTE_KEY_HERE

// Requires a paid ChatGPT plan
// (Plus / Pro / Team / Enterprise).
Grok
Grok Remote MCP Tools
// Grok → Settings → Tools
{
  "mcp_servers": [{
    "name": "querystreams",
    "url": "https://mcp.querystreams.com",
    "auth_header": "X-MCP-Key",
    "auth_value": "qsmcp_..."
  }]
}

Restart your AI client. On its next start it will discover the eight Query Streams MCP tools listed above and surface them in its tool palette. In Cursor and Claude Desktop you can verify by typing “list connectors” — the AI should call qs_list_connectors and return your Oracle connector along with anything else you have configured.

Step 3: Ask the AI an Oracle question

You don’t write SQL — the AI does. You ask a question, the AI picks the right MCP tool, the agent runs the query against your Oracle Database, and the answer comes back as text plus tables. Three example prompts to try first:

“What’s our average employee tenure by department?”
Workforce
The AI will call qs_get_connector_schema to discover the hr.employees and hr.departments tables, then qs_run_query with a SELECT that joins them on department_id and computes AVG(MONTHS_BETWEEN(SYSDATE, e.hire_date) / 12) per department. The result is a ranked table of departments with average tenure in years, head-count, and a confidence note about turnover. You’ll get a written interpretation alongside — which departments are stable, which are growing, which look like attrition risks — that the AI inferred directly from Oracle’s HR data.
“Show me the top 10 highest-paid employees who joined in the last year.”
Compensation
The AI uses Oracle-idiomatic date arithmetic to bound the last 12 months (e.hire_date >= ADD_MONTHS(SYSDATE, -12)), applies NVL(commission_pct, 0) to handle the nullable percentage column Schema Intelligence flagged, joins hr.employees through department_id to hr.departments for context, and ranks by salary with FETCH FIRST 10 ROWS ONLY. The result is a table with employee id, last name, base salary, total compensation including commission, department, and hire date — the AI typically annotates which roles are above their jobs.max_salary band as a follow-up.
“Which job categories have grown the most year-over-year?”
Headcount
The AI uses Schema Intelligence’s enum detection on employees.job_id to operate on the discovered job-code distribution (IT_PROG, SA_REP, ST_CLERK, …), groups hr.employees by job_id with two windowed counts — one filtered to hire_date >= ADD_MONTHS(SYSDATE, -12) and another for the prior 12-month window — then ranks by year-over-year delta. The result is a sorted list of job categories with current head-count, prior-year head-count, absolute change, and percent change. The AI usually flags the fastest-growing role as a hiring-trend signal rather than a one-off rounding artifact.

The first time the AI calls a tool, your client may pop up a confirmation prompt asking you to approve the tool call — that’s MCP’s standard consent flow, not anything Query Streams adds. Approve once and the AI proceeds with the rest of the conversation freely. You can revisit the consent at any time in your client’s settings.

Honest billing notice: MCP usage is charged on uncompressed bytes

Query Streams’ Excel add-in, Google Sheets add-on, web Query Builder, and Nova AI all run over our compressed cloud link — we measure and bill compressedBytes against your data realm. The MCP transport (Streamable HTTP per the official MCP spec) does not reliably support compression end-to-end across every client and intermediate proxy, so we measure and bill uncompressedBytes for MCP traffic.

  • What this means: a 5 MB Oracle aggregate query costs ~5 MB of your data realm when fetched via MCP, vs. ~700 KB – 1.2 MB via Excel / Sheets / Nova / the Query Builder. Oracle data with repeated VARCHAR2 values, job_id codes, and department_name dimensions compresses ~5x via LZ4 on the other transports. Same data, different transport, different billable size.
  • What you can do: for very large recurring queries (e.g. 100K+ row exports out of hr.job_history or audit tables), prefer the Excel / Sheets / Nova path. For interactive AI tool calls (the typical 100–5,000 row Oracle response that fits in an LLM context), MCP is the right choice and the cost difference is in cents.

Frequently asked questions

Do I need to open ports or run a VPN to use this? +
No inbound firewall rule, port-forwarding, NAT punchthrough, or VPN. The Network Agent makes one outbound TLS connection (port 443) and your AI client reaches https://mcp.querystreams.com from the public internet — if outbound HTTPS works on the agent host, MCP works. See how the outbound-only connection works →
Which AI tools can I use with Query Streams MCP? +
Any client that speaks the open Model Context Protocol — Claude Desktop, Claude Code, Cursor, ChatGPT (paid), Grok, Gemini CLI, Windsurf, Zed, and 500+ more. Bring your own AI tool; you don’t have to switch. See every supported AI client →
Can I revoke an MCP key? +
Yes — three independent kill-switches (per-key from the /mcp page, per-org via plan settings, and platform-level), none of which need a database password rotation or agent restart. More on MCP key security →
How is MCP usage billed against my data realm? +
MCP execute calls deduct from the same data-realm budget your Excel, Google Sheets, web Query Builder, and Nova AI usage already draws on — one consumption budget across every access method. The size measured for MCP differs. The other clients run over our compressed cloud link (we bill compressedBytes); MCP runs over Streamable HTTP, which doesn’t reliably support compression end-to-end through every client and proxy, so we bill uncompressedBytes. A 5 MB Oracle aggregate query returned to Excel typically costs ~700 KB – 1.2 MB of your data realm; the same 5 MB result returned to Cursor over MCP costs ~5 MB. Oracle data with repeated VARCHAR2 values compresses ~5x via LZ4 on the other transports. We’re transparent about it because we’d rather you know up front than be surprised at the end of the billing cycle.
Does Query Streams MCP work with my Oracle Autonomous Database, Oracle XE, or Oracle on RAC clusters? +
Yes — the Network Agent connects via the Oracle Instant Client to any Oracle Database instance, 11g or newer. Oracle Autonomous Database (Always Free, Transaction Processing, Data Warehouse, JSON), Oracle XE (the free local edition, ideal for development workstations), Oracle on RAC (Real Application Clusters), Oracle Exadata (on-premise X8M/X9M and Exadata Cloud@Customer), Oracle Database 19c / 21c / 23c on premise, AWS RDS for Oracle, Azure Database for Oracle, and self-hosted Oracle on EC2 / Azure VMs / OCI Compute / Google Compute Engine all look the same to the agent: a TNS connection string plus credentials (password, wallet, Kerberos, or LDAP/directory service). For Autonomous Database the agent loads the wallet you downloaded from OCI and uses TLS mutual auth out of the box. For RAC clusters the agent talks to the SCAN listener — you don’t have to enumerate the cluster nodes yourself. Tip: register each Oracle instance as its own connector. Your transactional 19c primary, your read-only RAC standby, your Exadata data warehouse, and your dev XE database can be four separate connectors on the same MCP key, and the LLM picks the right one by name based on the question (point lookups go to OLTP, big analytical aggregations go to Exadata). The MCP server doesn’t see the credentials; only the agent does.
How does this differ from running an open-source Oracle MCP server myself? +
A direct Oracle MCP server (community projects on GitHub do exist) is one MCP per data source. To get Claude reading from your Oracle + Google Search Console + your Stripe account + your Snowflake warehouse you’d need four MCP servers configured separately in every AI client, each with its own credentials, each with its own scope model, each with its own audit story. Query Streams MCP is one key reaching every connector your account has paired. You also pick up Schema Intelligence, agent-layer read-only enforcement, per-key rate limits, audit trail in event_logs, and the same data-realm billing pipeline you already use — none of which a direct Oracle MCP gives you.
What happens if the AI tries to write or delete data? +
It’s rejected at the agent before the data source sees the SQL. Every qs_run_query call is parsed by a hardcoded read-only validator that allows only SELECT, WITH, and EXPLAIN PLAN statements; anything else returns READONLY_VIOLATION and never reaches Oracle. The validator runs in the agent process on your network, not in the cloud, so a compromised cloud surface couldn’t bypass it. (You can layer an Oracle-side read-only user on top if you want belt-and-suspenders — create a user with only SELECT privileges on the relevant hr. / sales. / finance. schemas, or grant the SELECT_CATALOG_ROLE for read-only data-dictionary access. The agent’s validator is independent of whatever Oracle grants you’ve configured.)
Can I see what the AI actually asked? +
Yes. Every MCP tool call writes a row to event_logs with the org, user, key, scope, latency, and result code. The org-admin can answer “who used MCP last week, which connector, and what did they ask?” with a single query. Note that we log the tool name and metadata, not the SQL text or returned rows — those flow through the cloud link and never land in cloud logs. If you want full SQL-text audit, enable database-side auditing on the underlying engine; for Oracle specifically that’s Unified Auditing (12c+, the recommended modern path), the legacy AUDIT statement against SYS.AUD$ / DBA_AUDIT_TRAIL, Fine-Grained Auditing (DBMS_FGA) for column-level scoping, or Oracle Audit Vault and Database Firewall for centralised audit across multiple Oracle instances.
Do I have to run Schema Intelligence to use Query Streams MCP? +
No — Schema Intelligence is opt-in per (connector, database) pair, and MCP works fine without it. The AI gets bare schema (types, primary keys, formal foreign keys, indexes) and writes basic queries. With SI enabled, the AI gets six additional layers of curated metadata: (1) AI-curated descriptions on every schema, table, and column; (2) table classifications (FACT for transactional events, DIM for descriptive reference, LOOKUP for small code maps) plus a business domain tag (hr, sales, finance, seo, support, and 14 more); (3) a semantic type on every column (currency, email, date_iso, status_code, percentage, ranking_position, identifier, url, person_name, and 9 more) that drives dialect-correct Oracle SQL generation (SYSDATE, NVL, FETCH FIRST n ROWS ONLY, ADD_MONTHS); (4) sample values from your real data so the LLM recognises patterns no schema can show, including pre-12c truncated column names; (5) enum detection with full value distributions for low-cardinality columns like job_id; and (6) AI-discovered foreign keys based on cross-table data overlap (and confidence-scored enrichment of the FKs Oracle’s data dictionary already declares), surfaced through qs_get_relationships. Without SI, every schema-tool response also carries an si_recommendation block listing exactly what’s missing for the call — the AI can read this and offer to trigger SI mid-conversation via qs_request_si_analysis. Run time scales with table count: a small Oracle schema under 100 tables completes in around 10 minutes; a typical mid-size schema (a few hundred tables) finishes in 15–25 minutes; a large enterprise database with 1,500+ tables can take 45–60 minutes for a full scan. SI runs through your Network Agent against your data (never in the cloud), never writes to your database, never changes your schema, and refreshes incrementally when your schema changes — so subsequent runs after you add or alter tables are much faster than the first one. The end-to-end effect: with SI enabled, your AI client writes correct Oracle SQL on the first try far more often than it does against any “MCP for X” server that just hands the LLM raw ALL_TAB_COLUMNS.
What if I add another connector later, like Stripe or PostgreSQL? +
Nothing changes client-side — the same key reaches the new connector the moment the agent pairs it (qs_list_connectors picks it up automatically). One config block buys your whole account, present and future. Why one key covers every connector →
Do I have to set up MCP just to chat with my data? +
No — Nova AI is built into the Query Streams portal and works against every connector (Oracle included) with no MCP setup or config files. Use Nova to chat with your data inside Query Streams; use MCP when you want your own AI client (Claude, Cursor, ChatGPT, …) to reach the same data — same agent, same connectors, same Schema Intelligence underneath. Learn more about Nova AI →

Get started

Connect your AI tool to your Oracle Database in five minutes.

One MCP key reaches Oracle, every other database, and every API connector in your Query Streams account — with full audit trail, per-key rate limits, and zero firewall changes. Claude, Cursor, ChatGPT, and Grok all work out of the box.

Related guides: Download the Query Streams Agent | Database Connector Setup | All MCP Server guides | Nova AI text-to-SQL

Category: MCP Server

Tags: mcp, claude, cursor, oracle, oracle-database, database, enterprise, autonomous-database

Meta Description: Connect Oracle Database to Claude or Cursor via Query Streams MCP. Autonomous, RAC, Exadata, 19c. Outbound-only, read-only, 5-min setup.

Updated on June 16, 2026

Powered by BetterDocs