Skip to main content
Glama
rush-db

RushDB MCP Server

Official
by rush-db

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
RUSHDB_API_KEYYesRequired for local (API key) mode. Get your API key at https://app.rushdb.com
RUSHDB_API_URLNoOptional API base URL. Override for self-hosted or staging environments.https://api.rushdb.com/api/v1

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{}
prompts
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
getSchemaMarkdownA

STEP 0 — call this ONCE at the start of every conversation before constructing any query. Returns the complete graph schema as compact Markdown: all labels with record counts, all properties per label with their type and value ranges (min/max for numbers/datetimes, sample values for strings/booleans; array properties render as type[]), and all cross-label relationships with direction and edge property summaries. The Properties table includes a "Semantic Search" column: properties with an embedding index show sourceType similarityFunction dimensionsd [status] (e.g. managed cosine 1536d [ready]); others show —. A non-— value means the property is queryable with aiSemanticSearch. This single call replaces the need for separate findLabels + findProperties + findRelationships discovery calls. Use the result to determine exact label names (case-sensitive), field names, field types, and relationship patterns before building any findRecords query. Optionally pass labels array to narrow the output to specific labels. Pass force: true to bypass the 1-hour schema cache and force a fresh recalculation.

getSchemaA

Returns the same graph schema as getSchemaMarkdown but as structured JSON. Each item has: label (string), count (number), properties (array with id, name, type, optional isArray, recordsCount (number of records that carry this property), min/max for numbers/datetimes, values[] for strings/booleans, and an optional vectorIndexes array), and relationships (array with label, type, direction: in|out, count, and optional edge properties). vectorIndexes is non-empty when one or more embedding indexes exist for that property; each entry has: id, sourceType (managed|external), similarityFunction (cosine|euclidean), dimensions (number), status (pending|indexing|ready|error), modelKey. A non-empty vectorIndexes means the property is queryable with aiSemanticSearch. Use this when you need property id values to pass to propertyValues for deeper drill-down. For initial schema orientation, getSchemaMarkdown uses fewer tokens. Pass force: true to bypass the 1-hour schema cache and force a fresh recalculation.

findLabelsA

List or filter available record types (labels) and their counts. IMPORTANT: getSchemaMarkdown already returns ALL label names in STEP 0 — do NOT call findLabels as a substitute for it. Only call findLabels when you need label counts after applying record-scoped predicates, or getSchemaMarkdown was not called yet. Call with no arguments to list all labels. where is applied to Records, not label metadata; use getSchemaMarkdown to search label names. Returns objects with name (case-sensitive — use exact casing in all subsequent calls) and count (number of matching records). Pick the best matching label by: exact match > starts-with > substring > semantic similarity, preferring higher count on ties. State your label assumption briefly ("using DEAL for 'deals'") and proceed without asking.

createRecordA

Create a new record. Use the exact label casing returned by findLabels. Set mergeStrategy + mergeBy in options to enable upsert semantics (merge existing vs. replace).

updateRecordA

Partially update a record — only fields present in data are changed; all other existing fields are preserved. Use setRecord instead if you want to replace all fields. Requires recordId: retrieve it first with findRecords or getRecord if not already known.

deleteRecordA

Delete a single record by ID. Irreversible. Always confirm with the user before calling. Use findRecords to preview the record first.

findRecordsA

Primary read/query/list/search tool for records. Use findRecords to find records, search records, list records, retrieve matching records, filter records, or answer questions from data. Use this instead of exportRecords unless the user explicitly asks for CSV/export/download. Search records with a structured SearchQuery. BEFORE building any query with dates, metrics, groupBy, relationship traversal, or vector search — call getSearchQuerySpec to load the complete syntax reference. INTENT: metrics/analytics request (count/total/sum/avg/breakdown/top N by metric) → MUST include select + groupBy. NEVER fetch raw records to count/sum manually. RESPONSE: { data:[...records], total:N } — for simple "how many" read total directly; no count select needed. HARD RULES: (1) NEVER set limit when select is present — restricts the record scan and produces mathematically wrong results. Omit limit for all metrics queries. (2) labels contains root records only; put related labels inside where traversal blocks with $alias when referenced. (3) groupBy never accepts alias-only values like "$record"; use "$record.name" or a select key. (4) Ambiguous/incomplete named references should use $contains on a display property confirmed via schema discovery, not exact equality. (5) Related-count rankings keep the requested parent/entity as root; count the related alias and order desc for most/more or asc for least/less/fewer.

getRecordA

Fetch a single record by its ID. Use when you already have the ID from a previous findRecords or findOneRecord call.

getRecordsByIdsA

Fetch multiple records by their IDs in one call. Use after collecting IDs from a findRecords query.

attachRelationA

Create a directed or bidirectional relationship between records. sourceId and targetId/targetIds must already exist — use findRecords to resolve records by name/attribute first.

detachRelationA

Remove the relationships between a record and target records. Without relationType it removes relationships of every type; with direction "bidirectional" it removes them both ways. Not available inside a transaction. Use findRelationships to inspect existing relationships and confirm the correct type/direction before detaching.

findRelationshipsA

Discover and traverse relationships between records. Use this tool in two scenarios: (1) Multi-hop path discovery — fetch a sample record ID, then call findRelationships with source.where or target.where containing that ID to reveal adjacent labels; repeat to trace the full path before building a nested findRecords where clause. (2) Edge filtering — where applies to relationship type/properties; use source/target for endpoint record predicates. Does NOT support select or groupBy — use findRecords for metrics/analytics across related labels.

listRelationshipPatternsA

List inferred relationship patterns for the current project. Returns suggestions and their lifecycle status, current schema relationship summaries, and the latest analysis status. Use this before approving, ignoring, or deleting a relationship pattern.

analyzeRelationshipPatternsA

Queue schema analysis to generate relationship pattern suggestions for the current project. This may invoke the configured LLM. Poll listRelationshipPatterns to inspect completion status and suggestions.

approveRelationshipPatternA

Approve and apply a suggested relationship pattern. Call listRelationshipPatterns first so the user can review the inferred source, target, direction, type, mode, and confidence.

ignoreRelationshipPatternA

Ignore a suggested relationship pattern without applying it. Call listRelationshipPatterns first so the user can review the inferred pattern.

deleteRelationshipPatternA

Delete a saved relationship pattern. Irreversible. Confirm with the user before calling. When deleteExisting is true, relationships previously materialized by this pattern are also removed.

bulkCreateRecordsA

Insert multiple records of the same label in one call. Set mergeStrategy ("append" to keep existing unspecified fields, "rewrite" to replace) and mergeBy (fields to match on) in options to enable upsert semantics. Use the exact label casing returned by findLabels.

bulkDeleteRecordsA

Delete all records matching a query. IRREVERSIBLE and potentially high-impact. REQUIRED: always call findRecords with the same labels+where first to show the user a preview, then ask for explicit confirmation before calling this tool.

exportRecordsA

Export matching records as a CSV file only when the user explicitly asks to export/download CSV. For normal reading, answering, listing, searching, or inspecting records, use findRecords instead. Accepts the same labels/where/orderBy filters as findRecords. Call findProperties first to know available field names if constructing a where filter.

helpAddToClientA

Help the user add the RushDB MCP server to their MCP client

getQueryBuilderPromptA

Return the RushDB system prompt. Use this if your MCP client does not support the Prompts API.

getSearchQuerySpecA

Returns the complete RushDB SearchQuery specification as a focused reference document. Covers: all WHERE operators (string/number/boolean/datetime component objects/vector/$exists/$type), relationship traversal syntax ($alias/$relation with variable-length hops/$cycle ring detection/$id), logical grouping ($and/$or/$not/$nor/$xor), all select functions ($sum/$avg/$min/$max/$count/$collect/$timeBucket), both groupBy modes (dimensional + self-group), late-ordering rules, root-label vs related-label traversal rules, COLLECT nesting, limit rules by query mode, multi-hop path discovery, enum normalization, validation checklist, and annotated query examples. CALL THIS before building any findRecords query that involves dates, metrics, groupBy, relationship traversal, or vector search. Do not guess operator syntax — use this spec as the source of truth.

setRecordA

Replace ALL fields of a record with the provided data object — any existing fields not in data are deleted. Use updateRecord instead for partial/merge updates that preserve unspecified fields.

findOneRecordA

Return the first record matching the query — useful for entity resolution probes. Call with where: { : { $contains: "..." } } and a small limit to resolve a named entity to its ID before using it in a relationship filter. Prefer this over findRecords when you need exactly one representative match rather than a full list.

findUniqRecordA

Return the single record that uniquely matches the query — throws if zero or more than one record matches. Use for unique-key lookups (email, code, slug) where exactly one result is expected. Use findOneRecord instead when you only want the first match and duplicates are acceptable.

deleteRecordByIdA

Delete a single record by ID. Irreversible. Always confirm with the user before calling. Use getRecord to preview the record if needed.

propertyValuesA

Get statistics or distinct values for a specific property, identified by the id field returned from findProperties. What this tool returns depends on the property type: • number / datetime → returns { min, max } — use this to answer range, min/max, or spread questions for numeric or date fields. No findRecords aggregation needed. • string / boolean → returns a list of all distinct values — use this to canonicalize filter values before querying. Workflow for range/min/max questions: (1) findLabels, (2) findProperties to find the field and get its id and type, (3) call this tool with that id if type is number or datetime.

findPropertiesA

Discover the field names, types, and IDs available on a record label. Always call this before using field names in any query — never guess or invent field names. Filter by label using labels: ["LABEL_NAME"]. where is applied to Records, not property metadata. Each returned property object has: id (string), name (string), type (string | number | boolean | datetime), recordsCount (number of records that carry this property). Use the name field as the field name in where/orderBy/groupBy clauses. Use the id field as the propertyId argument to propertyValues. After calling this tool, decide the next step based on the field type: number or datetime → call propertyValues(propertyId) to get { min, max } for range questions, OR use findRecords with select: { min: ..., max: ... }; string or boolean → call propertyValues(propertyId) to get distinct values before filtering.

findPropertyByIdA

Fetch the metadata (name, type, label, recordsCount) of a single property by its ID. Use when you already have a propertyId and need to re-confirm its type or cardinality before calling propertyValues.

deletePropertyA

Permanently delete a property and all its values from every record that has it. Irreversible. Confirm with the user before calling.

findEmbeddingIndexesA

List all embedding index policies configured for the current project. Each index entry contains: id, label, propertyName, modelKey, dimensions, enabled, status (pending|indexing|ready|error), createdAt, updatedAt. Call this before creating a new index to check if one already exists for the same label+propertyName.

createEmbeddingIndexA

Create a new embedding index policy for a string property. For managed indexes (default), RushDB asynchronously embeds every existing value and keeps new values embedded on write. For external indexes (sourceType: "external"), the client supplies vectors via upsertEmbeddingVectors. Once the index status becomes "ready" (check with getEmbeddingIndexStats), use vectorSearch to query.

upsertEmbeddingVectorsA

Write pre-computed embedding vectors to an external vector index for a set of records. Only valid for indexes with sourceType "external". Each vector must contain exactly as many dimensions as the index was created with. After upserting, call getEmbeddingIndexStats to check if all records are indexed (status becomes "ready").

deleteEmbeddingIndexA

Delete an embedding index policy by its ID and strip all stored embedding vectors for that index. Irreversible. Confirm with the user before calling. Use findEmbeddingIndexes to get the indexId.

getEmbeddingIndexStatsA

Return indexing statistics for an embedding index: totalRecords and indexedRecords. Use this to monitor backfill progress after creating an index — when indexedRecords === totalRecords the index is fully ready.

vectorSearchA

Perform direct vector similarity search over records whose propertyName has been indexed with createEmbeddingIndex. For managed indexes: provide a free-text query — RushDB embeds it and returns the most similar records ranked by similarity (__score). For external indexes: provide a queryVector (pre-computed number[]) instead of query text. A where filter narrows candidates before ranking. Requires an embedding index in "ready" status for the given label+propertyName.

listTextIndexesA

List the project's keyword (BM25) text indexes: name, label, property ("*" = every string of the record), consistency and status.

createTextIndexA

Declare a keyword (BM25) text index over one property of a label, or every string of it (property "*"). It is built online; once its status is "ready" (listTextIndexes), search it with textSearch or as the text leg of vectorSearch.

deleteTextIndexA

Drop a text index by name. Irreversible. Confirm with the user before calling.

textSearchA

Keyword (BM25) search over a text index: records matching query, best first (__score), among those labels and where select. total counts every match. Query syntax: words match any (or all with allTerms), "quoted phrases", -excluded, +required.

semanticSearchA

Deprecated alias for vectorSearch. Performs direct vector similarity search over records whose propertyName has been indexed with createEmbeddingIndex. Prefer vectorSearch for new integrations. For natural-language schema-aware querying, use smartSearch.

smartSearchA

Convert a natural-language question into a RushDB SearchQuery using the project schema, execute it, and return matching records plus the generated query. Use this for user-facing questions such as "Who are piloting Falcon?" or "Find planets 3-5 hops away from Tatooine". For direct vector similarity over an embedding index, use vectorSearch instead.

Prompts

Interactive templates invoked by user choice

NameDescription
rushdb.queryBuilderRushDB Query Builder system prompt: guides the model to discover labels/properties first and construct validated SearchQuery objects before calling find-related tools.

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.8/5.0

Scored across 43 tools

Disambiguation3/5

Several tools overlap in purpose: deleteRecord and deleteRecordById are essentially identical, semanticSearch is a deprecated alias for vectorSearch, and findLabels/findProperties/findRelationships duplicate information already in getSchemaMarkdown/getSchema. Descriptions do provide guidance (e.g., redirecting to getSchemaMarkdown), but multiple redundant tools still create selection risk.

Naming Consistency4/5

Most tool names follow a consistent camelCase verb+noun pattern (e.g., createRecord, findRecords, deleteProperty). Minor deviations exist: some tools are noun-only (propertyValues, vectorSearch, textSearch, smartSearch), and a few use prefixes like bulkCreate. Overall still predictable and readable.

Tool Count2/5

43 tools is well above the typical 3-15 range and feels heavy for the domain. While RushDB covers many features (graph, vector, text, relationships, schema), the large count includes redundant and deprecated tools, suggesting the surface could be consolidated significantly.

Completeness4/5

Coverage is strong: full CRUD for records, relationship management, schema discovery, embedding/text index lifecycle, vector/text/smart search, and bulk operations. Minor gaps exist (e.g., no bulk update, no update for embedding indexes or relationship patterns), but agents can work around these.

Maintenance

ActivityMaintained
ResponsivenessNo issues