---
name: mcp-server-instructions
description: Write effective MCP server instructions for tool compaction support. Use when creating or updating the `instructions` parameter in MaaSProtectedFastMCP server initialization. Helps LLMs understand when to search for tools, workflow patterns, and cross-feature relationships.
---
# MCP Server Instructions
Write workflow-focused server instructions that help LLMs understand your server's capabilities.
## What Instructions Are
The `instructions` field is an optional string in MCP's `InitializeResult` that gets injected into the LLM's system prompt. It helps models understand:
- How to use your server's tools together
- When to search for specific tools (with tool compaction)
- Operational constraints and patterns
**Evidence**: In controlled testing, well-written instructions improved task success from 60% to 85% - a 25% improvement.
## Template
```python
instructions="""[Server name] for [domain] operations.
KEY WORKFLOWS:
- [Name]: [tool1] -> [tool2] -> [tool3]
- [Name]: [tool1] -> [tool2] (when [condition])
CONSTRAINTS:
- [Limit or behavior users need to know]
- [Input format quirks]
- [Auto-pagination or chunking behavior]"""
```
## What to Include
Focus on what individual tool descriptions don't convey:
| Include | Example |
| ---------------------------- | ----------------------------------------------------- |
| **Cross-tool relationships** | "Always call authenticate before any fetch\_\* tools" |
| **Operational patterns** | "Search results expire after 10 minutes" |
| **Constraints** | "Rate limited to 100 requests/minute" |
| **Sequencing** | "Use get_metadata before fetching large content" |
| **Format flexibility** | "IID accepts: #72, !72, '72', 72" |
## What to Avoid
| Avoid | Why | Instead |
| --------------------------- | ---------------------------------------- | -------------------------------- |
| Repeating tool descriptions | Already in tool docstrings | Show how tools work together |
| Marketing language | "comprehensive", "powerful" add no value | State capabilities factually |
| Lengthy manuals | Instructions should be <500 chars | Be concise and actionable |
| Listing all tools | Tools are discoverable | Only mention in workflow context |
**Bad**: "The search tool searches for files"
**Good**: "Use search before read to validate paths. Results expire after 10 min."
## Process
1. **Find tools** - Read server.py, locate all `@app.tool()` decorators
2. **Group by workflow** - Which tools are used together?
3. **Find dependencies** - Which tools need output from others?
4. **Note constraints** - Pagination, size limits, rate limits, formats
5. **Identify non-obvious behaviors** - Auto-pagination, caching, chunking
## Common Patterns
- **Search -> Details**: `search_X -> get_X`
- **List -> Inspect -> Act**: `list_X -> get_X -> update_X`
- **Metadata First**: `get_X_metadata -> get_X_content` (for large content)
- **Two-Step Updates**: `get_editmeta -> update_X` (when schema required)
- **Hierarchical Browse**: `list_parent -> get_parent -> list_children`
## Examples
### Good
```python
instructions="""GitLab server for repository and CI/CD operations.
KEY WORKFLOWS:
- Code Review: list_merge_requests -> get_merge_request -> get_merge_request_diffs
- Pipeline Debug: list_pipelines_jobs -> get_job_log_metadata -> get_job_log_paginated
- File Browse: search_repositories -> get_repo_tree -> get_file_contents
CONSTRAINTS:
- MR IID accepts: #72, !72, "72", 72
- Job logs >500KB auto-paginate to last 2000 lines
- Use get_job_log_metadata before fetching large logs"""
```
### Bad
```python
# Too vague - doesn't help LLM understand capabilities
instructions="GitLab MCP Server that validates tokens via Authorization Server introspection"
# Marketing fluff - no actionable information
instructions="""This is a comprehensive GitLab integration server that provides
powerful capabilities for working with GitLab repositories..."""
# Tool listing - just repeats what's already in tool descriptions
instructions="""Available tools: search_repos, list_projects, get_project,
get_file, list_commits, get_commit, list_issues, get_issue..."""
```
## Limitations
Instructions are probabilistic guidance, not deterministic rules. They improve LLM behavior but cannot guarantee it. Don't rely on instructions for security-critical or privacy-sensitive enforcement.