ms-graph-dev
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., "@ms-graph-devbuild a request to list all users in the tenant"
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.
Microsoft Graph Dev MCP
An MCP server that helps you construct and validate Microsoft Graph REST API calls — no authentication required in the server itself.
Tools are loaded on demand by resource category. Ask about SharePoint and the sites tools appear. Ask about files and the OneDrive tools appear. The server starts lean and grows with your needs, and always knows the required permissions for every operation.
What it does
Constructs valid Graph API request URLs, methods, headers, and bodies
Validates required and optional parameters
Returns required Microsoft Graph permissions (delegated and application) for every operation
Returns ready-to-use fetch code examples
Links to official Microsoft documentation for every operation
Explains cross-cutting concepts: pagination, OData queries, throttling, delta sync, batching, and auth
Loads resource categories on demand — only what you need
Related MCP server: ForIT Microsoft Graph
Tools
Always available
These tools are loaded immediately — no setup required.
Tool | Description |
| List all resource categories and which are currently loaded |
| Load tools for a category; triggers |
| Search Graph API endpoints by keyword; returns a |
| Build a valid |
| How |
|
|
| 429 handling, |
| Delta tokens, change tracking, initial sync vs incremental sync |
| JSON batching, |
| Delegated vs application permissions, consent flows, token acquisition |
Resource categories (loaded on demand)
Category | Tools | What you get |
users | 8 | Get, list, create, update, delete users; manager; direct reports; delta sync |
files | 11 | OneDrive/SharePoint document library: list, get, upload (<4MB and resumable), create folder, delete, move, copy, search, download URL, delta sync |
9 | List and get messages, send, create draft, reply, delete, move, list folders, delta sync | |
calendar | 8 | List, get, create, update, delete events; find meeting times; get free/busy schedule; delta sync |
groups | 8 | List, get, create, delete groups; list and manage members and owners |
notes | 8 | OneNote notebooks, sections, pages; create and read content |
tasks | 10 | Planner plans and tasks (CRUD); Microsoft To Do lists and tasks |
sites | 12 | SharePoint sites; lists; list items (CRUD); columns |
subscriptions | 5 | Create, list, get, delete, and renew webhook change notification subscriptions |
Example tool output
Every tool returns a structured object with the full request details and required permissions:
{
"endpoint": "https://graph.microsoft.com/v1.0/sites/{siteId}/lists/{listId}/items?expand=fields",
"method": "GET",
"headers": {
"Authorization": "Bearer {token}"
},
"pathParams": { "siteId": "contoso.sharepoint.com,abc123", "listId": "list456" },
"queryParams": { "expand": "fields" },
"body": null,
"description": "List items in list list456.",
"docsUrl": "https://learn.microsoft.com/en-us/graph/api/listitem-list",
"codeExample": "const response = await fetch('...', { method: 'GET', headers: { Authorization: 'Bearer {token}' } });\nconst data = await response.json();",
"requiredPermissions": {
"delegated": ["Sites.Read.All"],
"application": ["Sites.Read.All"]
},
"notes": "Column values are returned under the 'fields' property. This request already includes ?expand=fields. Without it the items array would contain only metadata, not column data."
}Installation
The recommended way to run this server is via npx — no local install needed.
npx -y @stubbedev/ms-graph-dev-mcpClaude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"ms-graph-dev": {
"command": "npx",
"args": ["-y", "@stubbedev/ms-graph-dev-mcp"]
}
}
}Claude Code (CLI)
claude mcp add ms-graph-dev -- npx -y @stubbedev/ms-graph-dev-mcpOr add to your project's .mcp.json:
{
"mcpServers": {
"ms-graph-dev": {
"command": "npx",
"args": ["-y", "@stubbedev/ms-graph-dev-mcp"]
}
}
}Cursor
Open Settings → MCP and add a new server, or edit ~/.cursor/mcp.json:
{
"mcpServers": {
"ms-graph-dev": {
"command": "npx",
"args": ["-y", "@stubbedev/ms-graph-dev-mcp"]
}
}
}Windsurf
Edit ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"ms-graph-dev": {
"command": "npx",
"args": ["-y", "@stubbedev/ms-graph-dev-mcp"]
}
}
}Zed
Edit your settings.json (open via Zed → Settings → Open Settings):
{
"context_servers": {
"ms-graph-dev": {
"command": {
"path": "npx",
"args": ["-y", "@stubbedev/ms-graph-dev-mcp"]
}
}
}
}OpenCode
Edit ~/.config/opencode/config.json:
{
"mcp": {
"ms-graph-dev": {
"type": "local",
"command": ["npx", "-y", "@stubbedev/ms-graph-dev-mcp"]
}
}
}Codex (OpenAI)
Edit ~/.codex/config.json:
{
"mcpServers": {
"ms-graph-dev": {
"command": "npx",
"args": ["-y", "@stubbedev/ms-graph-dev-mcp"]
}
}
}Development
git clone https://github.com/stubbedev/ms-graph-dev-mcp.git
cd ms-graph-dev-mcp
npm install
npm run build
npm startFor live reload during development:
npm run devTest with MCP Inspector
npx @modelcontextprotocol/inspector npx -y @stubbedev/ms-graph-dev-mcpLicense
MIT
Available Tools
11 toolsgraph_build_batchB
Build a Microsoft Graph JSON batch request body — combine up to 20 API calls into a single POST to /$batch.
| Name | Required | Description | Default |
|---|---|---|---|
| requests | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It states 'Build a Microsoft Graph JSON batch request body' but does not clarify whether the tool only builds the body or also sends the request. It lacks information about side effects, required permissions, or rate limits.
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, front-loaded sentence that efficiently conveys the core purpose without extraneous words.
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?
Despite the tool's simplicity (1 parameter), the description lacks details about the return value (e.g., does it return a string or object?), does not explain output format, and provides no usage context. Without an output schema, more description is needed.
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 description adds no parameter-level information, and schema description coverage is 0%. Although the input schema includes property descriptions, the tool's text does not compensate, missing an opportunity to clarify parameter usage or constraints beyond the schema.
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 'Build a Microsoft Graph JSON batch request body — combine up to 20 API calls into a single POST to /$batch' uses a specific verb (Build), identifies the resource (JSON batch request body), and distinguishes it from sibling tools like graph_explain_batch by indicating it constructs the actual request.
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 implies use when you need to batch multiple Graph API calls, but it does not explicitly state when to use this tool versus alternatives like graph_explain_batch, nor does it provide exclusion criteria or prerequisites (e.g., authentication).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_explain_batchA
Explain Microsoft Graph JSON batching — combine up to 20 API requests into a single HTTP call to reduce round trips.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
As an explanatory tool with no annotations, the description minimally implies no side effects but doesn't explicitly state it's read-only or provide behavioral details. Acceptable for a non-action tool.
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?
Single, front-loaded sentence conveying key information efficiently.
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 low complexity and lack of output schema, the description fully covers its purpose and functionality.
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?
No parameters exist, per instructions baseline is 4. Description adds no parameter info but schema coverage is 100%.
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 explicitly states the tool explains Microsoft Graph JSON batching and its benefit of reducing round trips. It clearly distinguishes from sibling tools like graph_explain_pagination.
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 graph_explain_throttling or graph_explain_permissions. While purpose is clear, no context for usage decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_explain_deltaA
Explain Microsoft Graph delta queries for efficient change tracking — get only changed items since last sync rather than fetching everything.
| 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 burden. It correctly indicates the tool is explanatory (non-destructive) but lacks details on any specific behavioral traits, such as whether it fetches data or just returns text.
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?
Single sentence with clear action ('Explain') and specific resource ('Microsoft Graph delta queries'). Front-loaded with the key benefit: 'get only changed items since last sync'. No waste.
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?
For a parameterless explanation tool with no output schema, the description fully covers what the tool does. It is complete given the tool's simplicity and context.
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?
Input schema has no parameters, so schema coverage is 100%. With 0 parameters, baseline is 4. Description does not need to add parameter info.
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?
Description clearly states the tool explains Microsoft Graph delta queries for efficient change tracking. It distinguishes itself from sibling tools like graph_explain_pagination and graph_explain_odata by focusing on delta queries specifically.
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?
Description implies the tool is for understanding delta queries but does not explicitly state when to use it versus alternatives like graph_explain_pagination or graph_explain_batch. No when-not or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_explain_errorsA
Explain common Microsoft Graph API error codes and how to fix them — 401, 403, 404, 429, 503, and Graph-specific error codes like InvalidAuthenticationToken, Forbidden, and ItemNotFound.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. It states the action (explain and fix) and scope (specific error codes). Could mention that it returns textual guidance, but behavior is clear for a read-only explanation tool.
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?
Single sentence that efficiently conveys purpose and scope. No wasted words.
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?
For a parameterless explanation tool, description covers key purpose and examples. Lacks explicit mention of output format (e.g., returns text), but overall sufficient given simplicity.
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?
No parameters exist, and schema coverage is 100%. Baseline score applies. Description adds value by listing error codes, but there is no parameter elaboration needed.
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?
Description clearly states the tool explains common Graph API error codes and fixes, listing specific codes. This distinguishes it from sibling explanation tools focusing on other topics (pagination, throttling, etc.).
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?
Implies use when encountering listed error codes, but no explicit guidance on when to use alternatives like graph_explain_throttling or graph_explain_pagination. Lacks 'when not to use' comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_explain_odataA
Explain OData query parameters supported by Microsoft Graph: $filter, $select, $expand, $orderby, $top, $count, $search.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, but the description accurately characterizes the tool as a read-only explainer. It does not disclose details like network usage or side effects, which are minimal for an informational tool.
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 sentence that effectively communicates the tool's purpose. It is front-loaded with the action verb and includes specific details without any fluff.
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?
For a simple informational tool with no parameters and no output schema, the description is nearly complete. It could mention the return format (e.g., text explanation), but that is a minor gap.
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 tool has zero parameters, so schema coverage is 100%. The description does not need to add parameter meaning. Baseline score of 4 is appropriate.
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 it explains OData query parameters supported by Microsoft Graph and lists the specific parameters. This distinguishes it from sibling tools like graph_explain_pagination or graph_explain_throttling.
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 does not provide explicit guidance on when to use this tool versus alternatives. It implies usage for understanding OData parameters but lacks when/not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_explain_paginationA
Explain how Microsoft Graph API pagination works with @odata.nextLink, and how to iterate all pages of results.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, but the description accurately conveys the tool's informational nature and lack of side effects. It transparently describes the content (pagination explanation) without misleading the agent. However, it could mention the return format or that it does not trigger API calls.
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 sentence that is clear, direct, and contains no extraneous words. It is front-loaded with the main purpose and is appropriately concise for the tool's simplicity.
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 parameters or output schema, the description is sufficient to convey its purpose. However, it does not mention what the explanation looks like (e.g., text, format), which could be helpful but is not critical. The presence of multiple sibling explain tools suggests a bit more context could be beneficial.
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?
There are zero parameters, and the schema coverage is trivially 100%. The description correctly omits parameter details since none exist. It adds no extra semantic information beyond the schema, but none is needed.
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 tool explains Microsoft Graph API pagination with specific detail about @odata.nextLink and iterating results. The verb 'explain' and resource are explicit, and it distinguishes from sibling explain tools by focusing on pagination.
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 only states what the tool does, with no guidance on when to use it versus sibling tools like graph_explain_odata. It does not provide context for choosing this tool over alternatives, limiting its helpfulness for an AI agent deciding which tool to invoke.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_explain_permissionsA
Explain Microsoft Graph permission types — delegated vs application, how to register an app, and least-privilege best practices.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose any behavioral traits beyond its explanatory purpose. It is a stateless knowledge tool, so side effects are not expected, but the description lacks details like whether it makes network calls or returns cached data.
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, well-structured sentence that front-loads the key topic (permissions) and enumerates subtopics. No wasted words.
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 no parameters and no output schema, the description is sufficiently complete. It covers the main topics (delegated vs application, app registration, least-privilege) and is consistent with sibling explanation tools.
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 no parameters, and the description covers the purpose fully. Baseline of 4 applies as no parameters require additional semantics.
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 it explains Microsoft Graph permission types, including delegated vs application, app registration, and least-privilege best practices. It distinguishes itself from siblings like graph_explain_pagination and graph_explain_throttling by focusing specifically on permissions.
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 implies usage for understanding permission concepts, but does not explicitly state when to use this over other explanation tools like graph_explain_odata. However, the topic is sufficiently distinct from siblings, making the context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_explain_throttlingA
Explain Microsoft Graph throttling: what causes 429 errors, how to handle Retry-After, and service-specific limits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully conveys the tool's purpose as an informational explainer. It explicitly lists what it covers (causes, handling, limits), and while it doesn't state it has no side effects, its nature as a read-only explanation is clear.
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, well-structured sentence that immediately conveys the tool's purpose. No redundant information or filler. Every word earns its place.
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 (no parameters, no output schema), the description is fully complete. It covers what the tool does and what topics it explains, providing all necessary context for an agent to select and invoke it correctly.
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 tool has no parameters, and the schema coverage is 100% (empty). The description adds significant value by explaining the tool's purpose without needing to describe parameters. Baseline is 4 for zero-parameter tools.
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 tool explains Microsoft Graph throttling, including causes of 429 errors, handling Retry-After, and service-specific limits. It uses a specific verb-resource pair and is easily distinguishable from sibling tools like graph_explain_errors or graph_explain_pagination.
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 implies usage for understanding throttling issues but does not explicitly state when to use this tool versus alternatives. It lacks guidance on exclusions or specific scenarios where other explain tools would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_categoriesA
List all available Microsoft Graph API resource categories with descriptions and load status. Categories: users (Azure AD/Entra ID), files (OneDrive/SharePoint drives), mail (Exchange Online), calendar (Outlook), groups (M365/security groups), notes (OneNote), tasks (Planner/To Do), sites (SharePoint sites and lists), subscriptions (webhooks/change notifications).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly states what the tool returns (categories, descriptions, load status). No annotations are provided, but the description sufficiently discloses the read-only nature of this tool. No hidden behaviors are implied.
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 one sentence plus a concise list. It front-loads the main purpose and adds value with example categories. Every element earns its place without verbosity.
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 (zero parameters, no output schema), the description fully explains what the tool returns and its purpose. No annotations are needed as the description provides sufficient behavioral context.
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 tool has zero parameters, so the schema coverage is 100%. Per guidelines, baseline is 4 for 0-parameter tools. The description does not need to add parameter details.
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 tool lists all available Microsoft Graph API resource categories with descriptions and load status, and enumerates examples. It distinguishes itself from sibling tools that focus on loading a specific category or other Graph API operations.
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 implies usage for discovering categories before using tools like load_category, but does not explicitly state when to use this tool instead of alternatives or provide exclusions. No guidance on prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_categoryA
Activate Graph API tools for a resource category. Call this as soon as the user's intent is clear — do not wait for confirmation. Categories: 'users' (Azure AD/Entra ID user management), 'mail' (Exchange Online messages/folders), 'calendar' (Outlook events/scheduling), 'files' (OneDrive uploads/downloads/folders), 'sites' (SharePoint sites/lists/items), 'groups' (M365 and security groups), 'notes' (OneNote notebooks/pages), 'tasks' (Planner plans/tasks and To Do), 'subscriptions' (webhooks/change notifications). Multiple categories can be loaded — load all relevant ones when the task spans areas.
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes | Category to load: users, files, mail, calendar, groups, notes, tasks, sites, or subscriptions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral transparency. It reveals that the tool activates tools, can be called early, and supports multiple categories. However, it does not disclose whether the operation is idempotent, what side effects occur (e.g., resetting previous loads), or expected return behavior (e.g., success confirmation).
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 concise at 3 sentences. It front-loads the primary action, then usage timing, then category list, and ends with multi-load capability. No unnecessary words.
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 absence of annotations and output schema, the description covers core purpose, usage, and categories but omits expected return value or permission requirements. For a simple 1-parameter tool, this is adequate but not fully complete.
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?
Schema coverage is 100% (parameter described). The description adds semantic context by listing each category and its associated Microsoft services (e.g., 'users' for Azure AD/Entra ID). This enriches the bare schema description beyond the baseline of 3.
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 tool's purpose: 'Activate Graph API tools for a resource category.' This specific verb+resource combination is distinct from sibling tools like list_categories or graph_explain_*, making it easy for an AI agent to select correctly.
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 explicit usage guidance: 'Call this as soon as the user's intent is clear — do not wait for confirmation.' It also notes that multiple categories can be loaded for tasks spanning areas. However, it does not explicitly contrast with list_categories, though the purpose is distinct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_graph_apiA
Search Microsoft Graph REST API endpoints by keyword. Covers SharePoint sites and lists, OneDrive files, Exchange Online mail, Outlook calendar, Azure AD users, Microsoft 365 groups, Teams, Planner, OneNote, To Do, and webhook subscriptions.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search terms, e.g. 'sharepoint list items', 'upload file onedrive', 'send email', 'find meeting times' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. It fails to state whether the operation is read-only, what authentication is required, or the format of results. This is a significant gap for an API search tool.
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 concise with one sentence for the main purpose followed by a clear list of covered areas. It is front-loaded and contains no unnecessary words.
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 complexity (searching many Graph APIs) and lack of output schema, the description omits details about the output format (e.g., list of endpoints, documentation snippets) and pagination. It covers scope well but lacks output context.
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?
Schema coverage is 100% for the single 'query' parameter. The description adds example terms but no extra syntax or constraints beyond what the schema provides, meeting the baseline for high coverage.
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 tool's purpose: 'Search Microsoft Graph REST API endpoints by keyword.' It enumerates covered services (SharePoint, OneDrive, Exchange, etc.), distinguishing it from sibling tools that explain concepts like pagination or throttling.
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 clear context by listing covered domains and example queries, implying the tool is used to discover API endpoints for a given task. However, it lacks explicit guidance on when not to use this tool or prerequisites (e.g., authentication).
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.
11 tool updates
v0.1.11- First observed
graph_build_batch - First observed
graph_explain_batch - First observed
graph_explain_delta - First observed
graph_explain_errors - First observed
graph_explain_odata - First observed
graph_explain_pagination - First observed
graph_explain_permissions - First observed
graph_explain_throttling - First observed
list_categories - First observed
load_category - First observed
search_graph_api
TDQS
Each tool has a clearly distinct purpose: listing categories, loading them, searching API, and various explanatory tools cover different aspects (pagination, OData, throttling, delta, batch, permissions, errors). No two tools overlap in functionality.
Tool names follow a consistent verb_prefix pattern: list_, load_, search_, graph_explain_, graph_build_. The convention is uniform and predictable across all 11 tools.
11 tools is well-scoped for a developer assistant covering Microsoft Graph. It provides both utility (category management, search) and educational content (explanations) without being overwhelming.
The tool set lacks actual API execution tools like 'list_users' or 'send_mail'. While explanations are helpful, the server cannot perform real Graph operations, leaving significant gaps for an agent trying to interact with Microsoft Graph.
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
Manage Microsoft 365 email, calendar, contacts and inbox rules via the Graph API with OAuth 2.0.
Permissioned access to Outlook, OneDrive and Teams via the user's own Microsoft account
Read email/chat conversations, messages, contacts and teams; draft, send and update threads.
AI-callable tools for API mocking, testing, monitoring, security, and automation.
Related MCP Servers
- AlicenseBqualityDmaintenanceUniversal Microsoft Graph API gateway providing access to 1000+ endpoints for managing Microsoft 365 services including Teams, SharePoint, Exchange, Intune, security, compliance, and Azure AD with dynamic tool generation and advanced features like batch operations and webhooks.55MIT
- FlicenseAqualityBmaintenanceProvides direct access to Microsoft Graph API with multi-tenant account management, allowing users to interact with Microsoft 365 services across multiple tenants through a single flexible graph-request tool.713-
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to interact with Microsoft 365 services (users, mail, calendar, files) via Microsoft Graph API.461MIT
- AlicenseBqualityBmaintenanceEnables interaction with Microsoft Outlook services (Tasks, Calendar, Email, Contacts, and Teams) via the Microsoft Graph API, providing 39 tools for Claude Desktop with natural language and JSON output.39MIT
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/stubbedev/ms-graph-dev-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server