Skip to main content
Glama

Optimized Memory MCP Server V2

by AgentWong
fastmcp-rules.xml6.98 kB
<?xml version="1.0" encoding="UTF-8"?> <fastMCPImplementationRules> <metadata> <name>FastMCP Implementation Guide</name> <description>Rules for implementing MCP servers using FastMCP class</description> <version>1.0</version> </metadata> <coreRules> <serverCreation> <rule id="SC1">ALWAYS use FastMCP class from mcp.server.fastmcp</rule> <rule id="SC2">NEVER use low-level Server class from mcp.server.lowlevel</rule> <rule id="SC3">ALWAYS specify required dependencies when creating FastMCP instance</rule> <template> <code> from mcp.server.fastmcp import FastMCP mcp = FastMCP( "Your Server Name", dependencies=["required-packages"] ) </code> </template> </serverCreation> <toolImplementation> <rule id="TI1">ALWAYS use @mcp.tool() decorator for tools</rule> <rule id="TI2">NEVER implement custom tool handling</rule> <rule id="TI3">ALWAYS include type hints and docstrings</rule> <template> <code> @mcp.tool() async def your_tool(param1: type1, param2: type2) -> return_type: """Tool docstring with description. Args: param1: Description param2: Description Returns: Description of return value """ # Implementation pass </code> </template> </toolImplementation> <resourceImplementation> <rule id="RI1">ALWAYS use @mcp.resource() decorator for resources</rule> <rule id="RI2">NEVER implement custom resource handling</rule> <rule id="RI3">ALWAYS use URL-like patterns for resource paths</rule> <template> <code> @mcp.resource("category://{parameter}") async def your_resource(parameter: str) -> return_type: """Resource docstring with description. Args: parameter: Description Returns: Description of return value """ # Implementation pass </code> </template> </resourceImplementation> <testingRules> <rule id="TR1">NEVER mock FastMCP methods</rule> <rule id="TR2">ALWAYS use FastMCP's built-in testing support</rule> <rule id="TR3">ALWAYS use async test patterns with FastMCP</rule> <template> <code> @pytest.fixture async def mcp_server(): mcp = FastMCP("Test Server") return mcp @pytest.mark.asyncio async def test_your_feature(mcp_server): # Test implementation using FastMCP methods pass </code> </template> </testingRules> </coreRules> <prohibitedPatterns> <pattern id="PP1"> <name>Low-Level Server Usage</name> <detection>Import or use of mcp.server.lowlevel.Server</detection> <replacement>Use FastMCP from mcp.server.fastmcp</replacement> </pattern> <pattern id="PP2"> <name>Custom Tool Implementation</name> <detection>Direct implementation of call_tool or similar methods</detection> <replacement>Use @mcp.tool() decorator</replacement> </pattern> <pattern id="PP3"> <name>Custom Resource Implementation</name> <detection>Direct implementation of read_resource or similar methods</detection> <replacement>Use @mcp.resource() decorator</replacement> </pattern> <pattern id="PP4"> <name>Manual Async Operation Tracking</name> <detection>Custom implementation of async operation status tracking</detection> <replacement>Use FastMCP's built-in async support</replacement> </pattern> </prohibitedPatterns> <requiredPatterns> <pattern id="RP1"> <name>FastMCP Initialization</name> <requirement>Create FastMCP instance with proper server name and dependencies</requirement> <example> mcp = FastMCP("Server Name", dependencies=["dep1", "dep2"]) </example> </pattern> <pattern id="RP2"> <name>Tool Registration</name> <requirement>Use tool decorator with proper type hints</requirement> <example> @mcp.tool() async def tool(param: type) -> return_type: pass </example> </pattern> <pattern id="RP3"> <name>Resource Registration</name> <requirement>Use resource decorator with URL-like paths</requirement> <example> @mcp.resource("path://{param}") async def resource(param: str) -> return_type: pass </example> </pattern> <pattern id="RP4"> <name>Async Testing</name> <requirement>Use async test patterns with FastMCP</requirement> <example> @pytest.mark.asyncio async def test_feature(mcp_server): pass </example> </pattern> </requiredPatterns> <errorHandling> <rule id="EH1">Use FastMCP's error handling mechanisms</rule> <rule id="EH2">Let FastMCP handle protocol errors</rule> <rule id="EH3">Use proper exception types for business logic</rule> <pattern> <code> from mcp.types import MCPError @mcp.tool() async def your_tool(): try: # Implementation pass except Exception as e: raise MCPError(str(e)) </code> </pattern> </errorHandling> <validationChecks> <check id="VC1">No imports from mcp.server.lowlevel</check> <check id="VC2">All tools use @mcp.tool() decorator</check> <check id="VC3">All resources use @mcp.resource() decorator</check> <check id="VC4">No custom implementations of MCP protocol methods</check> <check id="VC5">Proper async patterns used throughout</check> </validationChecks> </fastMCPImplementationRules>

Latest Blog Posts

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/AgentWong/optimized-memory-mcp-serverv2'

If you have feedback or need assistance with the MCP directory API, please join our Discord server