entraadm-mcp: Instructions file for GitHub Copilot

.github/copilot-instructions.md

entraadm-mcp copilot-instructions.md is an instructions file for GitHub Copilot from shigechika/entraadm-mcp. It costs 1,204 tokens per session, scanned A, original, MIT.

Review instructions for a read-only MCP server that triages Microsoft Entra ID sign-in and audit logs. Microsoft Entra ID manages identities, and the instructions focus on safely querying Microsoft Graph, the API used to access those records.

In plain words
What is it for?
Use them when reviewing OData filters, user lookups, input validation, and other changes to Entra ID log-analysis tools.
Why use it?
They help reviewers prevent injection vulnerabilities and unsafe handling of user identifiers. They also clarify that this server does not unblock accounts, reset passwords, or revoke sessions.

Instructions file for GitHub Copilot

Written for GitHub Copilot: a Copilot instructions file. Also seen: mentions CLAUDE.md.

This is shigechika/entraadm-mcp's own configuration. It tells GitHub Copilot how to work on entraadm-mcp itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything entraadm-mcp configures →

Reuse

Borrowing it

Nothing to install: this file belongs to shigechika/entraadm-mcp. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.

Copy the file
curl -O https://raw.githubusercontent.com/shigechika/entraadm-mcp/main/.github/copilot-instructions.md
Clone the repo
git clone --depth 1 https://github.com/shigechika/entraadm-mcp

Made for: GitHub Copilot.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for entraadm-mcp copilot-instructions.md

README.md
[![agentmods](https://agentmods.dev/badge/instructions/shigechika/entraadm-mcp/copilot-instructions.svg)](https://agentmods.dev/instructions/shigechika/entraadm-mcp/copilot-instructions)
Your own site
<a href="https://agentmods.dev/instructions/shigechika/entraadm-mcp/copilot-instructions"><img src="https://agentmods.dev/badge/instructions/shigechika/entraadm-mcp/copilot-instructions.svg" alt="Measured on agentmods" height="20"></a>
Per session 1,204 This file is loaded in full into every session.
When invoked 1,204 The same file — it is already loaded in full.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.01204 $0.01204
Opus 5 $0.00602 $0.00602
Sonnet 5 $0.00241 $0.00241
Haiku 4.5 $0.00120 $0.00120

Measured 7d ago against content hash 366a5b2cde1c, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-08, from the pricing page.

Security

Grade A, and why

entraadm-mcp copilot-instructions.md scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 7d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.github/copilot-instructions.md · 78 lines

How it starts

The opening of the file, as written. The whole thing — 78 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Copilot review instructions — entraadm-mcp

This repo is a stdio MCP server (FastMCP) for Microsoft Entra ID sign-in and audit-log triage. All 7 tools are read-only — there is no write/mutating tool in this server (no account unblock, password reset, or session revoke), and no approval-gate or write-tool allowlist to worry about.

What to flag

  • A $filter string built with plain f-string interpolation instead of odata_quote(). Every OData filter in entraadm_mcp/server.py that embeds tool-caller input (a userPrincipalName, a search term) wraps that value with client.odata_quote() first. Tool arguments are MCP-input, effectively LLM-driven, and must be treated as adversarial — an unescaped value lets a crafted UPN like a' or '1'='1 reshape the query. A new filter-building call site that skips odata_quote() is an injection gap.
  • A UPN-typed argument used before validate_upn(). Every tool taking a user/upn parameter calls validate_upn() before using it — this both rejects malformed input early and, together with _find_user() routing lookups through $filter rather than interpolating the value into a URL path segment, prevents a value containing / from reshaping the request path. A new per-user tool that skips this, or that builds a path like f"/users/{upn}" directly instead of going through _find_user()/_resolve_user_id(), is a gap.
  • Print/log statements, or anything writing to stdout. This is a stdio MCP server: stdout is the JSON-RPC channel. A print() (including a stray debug print) corrupts every message after it. Diagnostics belong in an exception message returned to the caller, not on stdout.
  • A client secret, access token, or full exception text from azure-identity/httpx reaching a tool's return value. client.py's _access_token() catches credential failures and re-raises as GraphAuthError(f"... ({type(e).__name__})") — deliberately dropping the original exception's message text, since azure-identity exceptions can echo back configuration values. A new catch site that includes str(e) from a credential call, or that logs/returns a raw Authorization header, is a leak.
  • A tool that returns {"error": ...} for "no such account". get_user/get_user_auth_methods deliberately answer a nonexistent userPrincipalName with {"found": false, "user_principal_name": upn}, not an error key (see CLAUDE.md's Conventions section for why). A new per-user tool, or an edit to these two, that collapses "not found" into the generic error path breaks that contract.
  • A GraphPermissionError catch that doesn't set a correct missing_permission. Each tool hardcodes the actual Graph permission its own call needs (AuditLog.Read.All for the sign-in/audit tools, UserAuthenticationMethod.Read.All for get_user_auth_methods) — there is no single global constant, because different tools genuinely need different permissions. Copy-pasting one tool's except-block into another without updating the permission name is a real bug, not a style nit.
  • A new paged Graph call that doesn't propagate capped. Every result built from client.get_paged() includes a capped: bool field, so a page-budget cutoff is never indistinguishable from "the window was fully scanned and this is everything." A new tool or section that drops this is a silent-truncation gap.
  • A literal email/domain/IP-shaped string added to scripts/smoke_probes.py. That file is scanned by tests/test_smoke_probes.py::test_no_tenant_specific_literals_in_specs for exactly this, including inside comments — this repository is public and must never name a real tenant, account, or app registration. A probe needing a per-account argument must build it in an args_factory at run time (see the existing _fake_user_arg/_fake_upn_arg), never as a static literal.

Read the full file on GitHub · 78 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 7d ago First seen · 78 lines · 1,204 tokens per session scan A 366a5b2cde1c

Subscribe to this mod's changes

entraadm-mcp copilot-instructions.md is an instructions file published in the GitHub repository shigechika/entraadm-mcp (0 stars, last pushed 15d ago), licensed MIT. It adds 1,204 tokens to every session, about $0.0060 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other instructions, from other repositories

next.js AGENTS.md

AGENTS.md instructions for vercel/next.js, covering next.js development guide, codebase structure, monorepo overview, core package: packages/next and other important packages.

vercel/next.js · 7,296 tokens

codex AGENTS.md

AGENTS.md instructions for openai/codex, covering rust/codex-rs, the codex-core crate, code review rules, crate api surface and model visible context.

openai/codex · 5,153 tokens

vscode buildNext.instructions.md

Working notes and architecture documentation for the new esbuild-based build system in build/next. Use when making changes to the new build pipeline (transpile/bundle commands, NLS plugin, source-map handling, resource copying, or self-hosting watch tasks).

microsoft/vscode · 6,785 tokens

vscode oss-third-party-notices.instructions.md

Instructions for microsoft/vscode, covering vs code oss third-party-notices pipeline, architecture, pipeline flow in ci, applying the notice (cutover) and fallback chain (never fail the build).

microsoft/vscode · 5,001 tokens

langchain AGENTS.md

AGENTS.md instructions for langchain-ai/langchain, covering global development guidelines for the langchain monorepo, corridor security analysis, project architecture and context, monorepo structure and development tools & commands.

langchain-ai/langchain · 4,469 tokens

spec-kit AGENTS.md

AGENTS.md instructions for github/spec-kit, covering agents.md, about spec kit and specify, quickstart — add a new integration in 5 steps, integration architecture and integrationmanifest — file tracking.

github/spec-kit · 7,104 tokens