Cursor Admin MCP Server
Supports loading configuration from .env files for API key management and other environment variables.
Integrates with GitHub for CI workflows, bug reporting, feature requests, and discussions.
Includes testing support with Jest, allowing for running tests with coverage and in watch mode.
Runs on Node.js, with specific support for Node.js 16+ as a prerequisite for installation.
Allows installation and distribution of the MCP server package through npm, with support for running via npx.
Built with TypeScript, following TypeScript best practices for development.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Cursor Admin MCP Servershow me team usage for the last 30 days"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Cursor Admin MCP Server
by Utlyze.com
š® The Team Analytics Power-Up for Your AI Assistant
Brought to you by Utlyze - Zero Latency Operations Through AI Employees
Related MCP server: Cost Management MCP
š Quick Install
npx -y cursor-admin-mcpThat's it. Your AI assistant just leveled up.
šÆ What You Get
Think of this as equipping your AI with X-ray vision for your development team:
š¢ Team Roster - Instantly know who's on the team and their roles
š Usage Analytics - See who's actually coding vs. who's in meetings
š° Credit Tracker - Know exactly where your AI credits are going
š Productivity Metrics - Lines added, AI acceptance rates, favorite models
š Deep Insights - Which developer uses which tools, when they're most active
šŖ Why This Matters
Stop asking your team for status updates. Your AI can now tell you:
"Who wrote the most code this week?"
"What's our AI spending trend?"
"Which team member has the highest AI acceptance rate?"
"Show me usage patterns for the last month"
šø See It In Action
You: "Show me team usage for this week"
AI: Here's your team's activity for the last 7 days:
š„ TEAM MEMBERS
1. James Brady (Owner) - james@jamesbrady.org
2. Cody Vincent - vincent.cody298@gmail.com
3. 2 other members
š USAGE STATISTICS
⢠Most Active: Cody Vincent (641 AI requests)
⢠Most Productive: Cody Vincent (29,477 lines added)
⢠Top Models: claude-4-opus, gpt-4, claude-sonnet
⢠Active Days: 2/4 members coding daily
š° SPENDING: $1,957.32 total
⢠James Brady: $1,848.57 (94.4%)
⢠Cody Vincent: $73.76 (3.8%)
⢠Others: $34.99 (1.8%)Installation
Prerequisites
Node.js 16+
A Cursor team admin API key (get it from your team settings)
Install from npm
npm install -g cursor-admin-mcpInstall from source
git clone https://github.com/h3ro-dev/cursor-admin-mcp.git
cd cursor-admin-mcp
npm install
npm run buildConfiguration
1. Set up your API key
Create a .env file in the project root (or set the environment variable):
CURSOR_API_KEY=key_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx2. Configure in Claude Desktop
Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"cursor-admin": {
"command": "npx",
"args": ["cursor-admin-mcp"],
"env": {
"CURSOR_API_KEY": "key_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
}3. Configure in Cursor
Add to your Cursor settings:
{
"mcpServers": {
"cursor-admin": {
"command": "node",
"args": ["/path/to/cursor-admin-mcp/dist/index.js"],
"env": {
"CURSOR_API_KEY": "key_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
}Available Tools
1. get_team_members
Get a list of all team members with their information.
Example usage in Claude/Cursor:
"Show me all team members"
"List everyone on the team with their roles"Returns:
[
{
"name": "John Doe",
"email": "john@example.com",
"role": "admin"
},
{
"name": "Jane Smith",
"email": "jane@example.com",
"role": "member"
}
]2. get_daily_usage_data
Retrieve detailed usage metrics for a specified date range (max 90 days).
Parameters:
startDate: Start date in epoch millisecondsendDate: End date in epoch milliseconds
Example usage in Claude/Cursor:
"Show me usage data for the last 7 days"
"What was our team's AI acceptance rate last month?"
"Which models did we use most this week?"Returns:
[
{
"date": "2024-01-15",
"linesAdded": 1523,
"linesDeleted": 342,
"acceptanceRate": 0.82,
"requestTypes": {
"completion": 234,
"chat": 56,
"edit": 23
},
"mostUsedModels": ["gpt-4", "claude-3"],
"mostUsedExtensions": ["copilot", "cursor-tab"],
"clientVersion": "0.42.0"
}
]3. get_spending_data
Get team spending information with optional filtering and pagination.
Optional Parameters:
searchTerm: Filter by search termsortBy: Field to sort bysortDirection: "asc" or "desc"page: Page numberpageSize: Items per page
Example usage in Claude/Cursor:
"Show me team spending"
"Who are the top spenders this month?"
"Search for John's spending data"Returns:
{
"members": [
{
"email": "john@example.com",
"name": "John Doe",
"spending": 125.50
}
],
"total": 1250.00,
"page": 1,
"pageSize": 10
}Development
Setup
# Clone the repository
git clone https://github.com/h3ro-dev/cursor-admin-mcp.git
cd cursor-admin-mcp
# Install dependencies
npm install
# Copy environment file
cp .env.example .env
# Edit .env and add your CURSOR_API_KEY
# Run in development mode
npm run devTesting
# Run tests
npm test
# Run tests with coverage
npm test -- --coverage
# Run tests in watch mode
npm run test:watchBuilding
# Build the project
npm run build
# Run the built version
npm startProject Structure
cursor-admin-mcp/
āāā src/
ā āāā index.ts # MCP server implementation
ā āāā cursor-client.ts # Cursor API client
āāā tests/
ā āāā cursor-client.test.ts # Test suite
āāā examples/
ā āāā (example scripts)
āāā docs/
ā āāā (additional documentation)
āāā package.json
āāā tsconfig.json
āāā jest.config.js
āāā .env.example
āāā .gitignore
āāā README.mdExamples
Basic Usage
// The MCP server handles all the communication
// Just use natural language in Claude/Cursor:
"Show me all team members and their roles"
"Get usage data for January 2024"
"What's our team's total spending this month?"
"Show me the AI acceptance rate trend for the last 30 days"Advanced Queries
// Complex date ranges
"Compare usage between last week and this week"
// Specific metrics
"Which team members have the highest AI suggestion acceptance rate?"
// Spending analysis
"Show me spending sorted by amount for team members whose name contains 'John'"Error Handling
The server includes comprehensive error handling:
Invalid API Key: Clear error message if authentication fails
Rate Limiting: Respects Cursor API rate limits
Date Validation: Ensures date ranges don't exceed 90 days
Network Errors: Graceful handling of connection issues
Invalid Parameters: Detailed validation messages
Security
API keys are never logged or exposed
All communication uses HTTPS
Basic authentication as per Cursor API requirements
Environment variables for sensitive data
Contributing
Contributions are welcome! Please:
Fork the repository
Create a feature branch (
git checkout -b feature/amazing-feature)Commit your changes (
git commit -m 'Add amazing feature')Push to the branch (
git push origin feature/amazing-feature)Open a Pull Request
Development Guidelines
Write tests for new features
Update documentation
Follow TypeScript best practices
Ensure all tests pass
Add examples for new functionality
Troubleshooting
API Key Issues
If you get authentication errors:
Verify your API key starts with
key_Ensure you're a team admin
Check the key hasn't been revoked
Connection Issues
If the server won't connect:
Check your internet connection
Verify the Cursor API is accessible
Check for any firewall restrictions
Date Range Errors
If you get date range errors:
Ensure your date range is within 90 days
Use epoch milliseconds for dates
Verify endDate > startDate
License
MIT License - see LICENSE file for details
Acknowledgments
Built for the Cursor editor
Implements the Model Context Protocol
Uses the official MCP SDK
Support
š Report bugs
š” Request features
š Read the docs
š¬ Join discussions
Built by Utlyze
Utlyze - Zero Latency Operations Through AI Employees
We're pioneering the future of work by creating AI employees that seamlessly integrate with your existing workflows. The Cursor Admin MCP Server is just one example of how we're making teams more efficient through intelligent automation.
Visit Utlyze.com | Contact Us | LinkedIn
Made with ā¤ļø by the Utlyze team for the Cursor community
Available Tools
3 toolsget_daily_usage_dataC
Get detailed daily usage metrics for the team including lines added/deleted, AI suggestions, and model usage
| Name | Required | Description | Default |
|---|---|---|---|
| startDate | Yes | Start date in epoch milliseconds | |
| endDate | Yes | End date in epoch milliseconds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states this is a read operation ('Get'), implying it's non-destructive, but doesn't mention any behavioral traits like authentication requirements, rate limits, data freshness, or pagination. For a tool that likely accesses sensitive usage data, this lack of context is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose and includes specific metric examples. It avoids redundancy and wastes no words, though it could be slightly more structured by separating usage guidance from the purpose statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of usage metrics and the lack of annotations and output schema, the description is incomplete. It doesn't explain what the return values look like (e.g., format, granularity), potential side effects, or error conditions. For a data-fetching tool with no structured output documentation, this leaves the agent under-informed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with both parameters clearly documented as epoch milliseconds for date ranges. The description adds marginal value by implying date-range filtering ('daily usage metrics'), but doesn't provide additional syntax, format details, or constraints beyond what the schema already specifies. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and specifies the resource 'detailed daily usage metrics for the team', including concrete examples like 'lines added/deleted, AI suggestions, and model usage'. It distinguishes from sibling tools by focusing on usage metrics rather than spending data or team members, though it doesn't explicitly name the alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'get_spending_data' or 'get_team_members'. It doesn't mention prerequisites, exclusions, or specific contexts where this tool is preferred, leaving the agent to infer usage based on the purpose alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_spending_dataC
Get team member spending information with optional filtering and pagination
| Name | Required | Description | Default |
|---|---|---|---|
| searchTerm | No | Search term for filtering | |
| sortBy | No | Field to sort by | |
| sortDirection | No | Sort direction | |
| page | No | Page number | |
| pageSize | No | Number of items per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions 'optional filtering and pagination', which hints at read-only behavior and some operational traits, but it doesn't cover critical aspects like rate limits, authentication needs, error handling, or what the output looks like (e.g., format, structure). For a tool with no annotations, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose ('Get team member spending information') and adds brief context ('with optional filtering and pagination'). There's no wasted wording, and it's appropriately sized for the tool's complexity, though it could be slightly more structured if it included more usage details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no annotations, no output schema, and 5 parameters, the description is incomplete. It covers the basic purpose and hints at behavior but fails to address key contextual elements like output format, error conditions, or how it differs from sibling tools. For a data retrieval tool with filtering and pagination, more detail is needed to guide the agent effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, meaning all parameters are documented in the input schema. The description adds minimal value beyond the schema by mentioning 'optional filtering and pagination', which loosely relates to parameters like 'searchTerm', 'page', and 'pageSize', but doesn't provide additional meaning or context. Given the high schema coverage, a baseline score of 3 is appropriate as the description doesn't compensate with extra insights.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('team member spending information'), making the purpose understandable. However, it doesn't explicitly differentiate this tool from its siblings like 'get_daily_usage_data' or 'get_team_members', which might also retrieve related data. The description is specific about what data is retrieved but lacks sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'optional filtering and pagination', which implies some context for usage, but it doesn't provide explicit guidance on when to use this tool versus alternatives like 'get_daily_usage_data' or 'get_team_members'. There's no mention of prerequisites, exclusions, or specific scenarios that warrant its use over siblings, leaving the agent with minimal direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_team_membersB
Get list of team members with their names, emails, and roles
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states it 'gets' a list, implying a read operation, but doesn't disclose behavioral traits like whether it requires authentication, has rate limits, returns paginated results, or handles errors. The description is minimal and lacks context beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without any wasted words. It's appropriately sized and front-loaded, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is minimally adequate. It explains what data is retrieved but lacks details on behavior, usage context, or output format. For a read-only tool with no parameters, this is the bare minimum, leaving gaps in understanding how to effectively use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so no parameters need documentation. The description doesn't add parameter details, but since there are no parameters, this is acceptable. Baseline is 4 for 0 parameters, as the description doesn't need to compensate for any gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('list of team members') with specific attributes (names, emails, roles). It's specific enough to understand what data is retrieved, though it doesn't explicitly differentiate from sibling tools like 'get_daily_usage_data' or 'get_spending_data' since those appear to be about different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention context, prerequisites, or exclusions, leaving the agent to infer usage based on the tool name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
3 tool updates
v1.0.0- First observed
get_daily_usage_data - First observed
get_spending_data - First observed
get_team_members
TDQS
Each tool has a clearly distinct purpose: get_daily_usage_data focuses on usage metrics, get_spending_data on financial data, and get_team_members on personnel information. There is no overlap in functionality or ambiguity between them.
All tool names follow a consistent verb_noun pattern with 'get_' as the prefix, followed by a descriptive noun phrase (e.g., daily_usage_data, spending_data, team_members). This uniformity makes the tools predictable and easy to understand.
With only 3 tools, the set feels thin for an admin server, as it lacks operations like update, create, or delete for team members or spending. While the tools cover key read-only functions, the scope suggests more administrative actions would be expected.
The toolset is severely incomplete for an admin domain, offering only read operations (get) without any ability to modify data, manage users, or handle configurations. This creates significant gaps that will limit agent effectiveness in administrative tasks.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
The Polar Signals MCP server enables AI assistants to connect directly with performance profiling data, allowing users to analyze application performance through natural language queries. Key capabilities include querying CPU performance and memory usage, exploring profiling metadata like profile types and labels, and providing AI-driven code optimization suggestions directly within development environments like Claude Code or Cursor.
MCP server for building and testing AI agents with multi-model experimentation and insights.
An MCP server that integrates with Discord to provide AI-powered features.
The Ramp MCP server enables users to securely connect Ramp with AI assistants like ChatGPT and Claude to query financial data and take actions using natural language. It transforms Ramp's developer API into a SQL interface that LLMs can query, allowing admins to analyze spend trends, identify cost savings, and run complex SQL analyses on comprehensive datasets (transactions, purchase orders, vendors, users), while all users can manage cards, view transactions, request reimbursements, and get expense policy answers.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that provides detailed information about your development environment to the Cursor code editor, enabling more context-aware assistance.7MIT
- AlicenseBqualityCmaintenanceAn MCP server for unified cost tracking and analysis across AWS, OpenAI, and Anthropic. It enables users to query expenditures, compare costs across providers, and analyze usage trends through natural language.10MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables SQL analytics on DuckDB and MotherDuck databases, allowing AI assistants and IDEs to query and analyze data.MIT
- AlicenseAqualityDmaintenanceMCP server that wraps Cursor Enterprise API to enable AI agents to answer questions about team spending, usage, and model adoption.17422MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/h3ro-dev/cursor-admin-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server