| name | using-cosmosdb-connector |
| description | Implements Azure CosmosDB container queries, CRUD, and patch operations using generated clients and MCP tools. Use when doing ANYTHING that touches CosmosDB or Cosmos DB in any way, load this skill. |
Major Platform Resource: Azure CosmosDB
Common: Interacting with Resources
Security: Never connect directly to databases/APIs. Never use credentials in code. Always use generated clients or MCP tools.
Two ways to interact with resources:
- MCP tools (direct, no code needed): Tools follow the pattern
mcp__resources__<resourcetype>_<toolname>. Use mcp__resources__list_resources to discover available resources and their IDs.
- Generated TypeScript clients (for app code): Call
mcp__resource-tools__add-resource-client with a resourceId to generate a typed client. Clients are created in /clients/ (Next.js) or /src/clients/ (Vite).
CRITICAL: Do NOT guess client method names or signatures. The TypeScript clients in @major-tech/resource-client have strongly typed inputs and outputs. ALWAYS read the actual client source code in the generated /clients/ directory (or the package itself) to verify available methods and their exact signatures before writing any client code.
Framework note: Next.js = resource clients must be used in server-side code only (Server Components, Server Actions, API Routes). Vite = call directly from frontend.
Error handling: Always check result.ok before accessing result.result.
Invocation keys must be static strings — use descriptive literals like "fetch-user-orders", never dynamic values like `${date}-records`.
MCP Tools
mcp__resources__cosmosdb_list_containers — List containers with partition key info. Args: resourceId
mcp__resources__cosmosdb_describe_container — Get partition key, indexing policy, unique keys. Args: resourceId, container
mcp__resources__cosmosdb_get_container_stats — Get document count and storage size. Args: resourceId, container
mcp__resources__cosmosdb_query — Execute a SQL query against a container. Args: resourceId, container, query, parameters?, maxItemCount?
TypeScript Client
import { cosmosClient } from "./clients";
const result = await cosmosClient.query<User>(
"users",
"SELECT * FROM c WHERE c.status = @status",
"fetch-active-users",
{
parameters: [{ name: "@status", value: "active" }],
partitionKey: "tenant-acme",
maxItemCount: 50,
},
);
if (result.ok) {
console.log(result.result.documents);
}
await cosmosClient.patch<User>(
"users",
"user-456",
"tenant-acme",
[
{ op: "set", path: "/name", value: "Jane" },
{ op: "incr", path: "/loginCount", value: 1 },
],
"update-user",
);
Tips
- Partition key is required for point operations (
read, replace, delete, patch). Omit for cross-partition queries.
- Use
patch() for partial updates — more efficient than full replace()
- Query parameters use
@param syntax: [{ name: "@status", value: "active" }]
- Use
continuationToken from query results for pagination through large result sets
Docs: CosmosDB Documentation