Skip to content

Commit 62a0af6

Browse files
Merge pull request #150 from salman1993/sm/add-instructions
feat: add instructions field to InitializeResult
2 parents 400dcda + bc6746e commit 62a0af6

File tree

7 files changed

+21
-4
lines changed

7 files changed

+21
-4
lines changed

src/mcp/server/fastmcp/server.py

+8-2
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,11 @@ class Settings(BaseSettings):
8686

8787

8888
class FastMCP:
89-
def __init__(self, name: str | None = None, **settings: Any):
89+
def __init__(
90+
self, name: str | None = None, instructions: str | None = None, **settings: Any
91+
):
9092
self.settings = Settings(**settings)
91-
self._mcp_server = MCPServer(name=name or "FastMCP")
93+
self._mcp_server = MCPServer(name=name or "FastMCP", instructions=instructions)
9294
self._tool_manager = ToolManager(
9395
warn_on_duplicate_tools=self.settings.warn_on_duplicate_tools
9496
)
@@ -110,6 +112,10 @@ def __init__(self, name: str | None = None, **settings: Any):
110112
def name(self) -> str:
111113
return self._mcp_server.name
112114

115+
@property
116+
def instructions(self) -> str | None:
117+
return self._mcp_server.instructions
118+
113119
def run(self, transport: Literal["stdio", "sse"] = "stdio") -> None:
114120
"""Run the FastMCP server. Note this is a synchronous function.
115121

src/mcp/server/lowlevel/server.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,12 @@ def __init__(
101101

102102

103103
class Server:
104-
def __init__(self, name: str, version: str | None = None):
104+
def __init__(
105+
self, name: str, version: str | None = None, instructions: str | None = None
106+
):
105107
self.name = name
106108
self.version = version
109+
self.instructions = instructions
107110
self.request_handlers: dict[
108111
type, Callable[..., Awaitable[types.ServerResult]]
109112
] = {
@@ -139,6 +142,7 @@ def pkg_version(package: str) -> str:
139142
notification_options or NotificationOptions(),
140143
experimental_capabilities or {},
141144
),
145+
instructions=self.instructions,
142146
)
143147

144148
def get_capabilities(

src/mcp/server/models.py

+1
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@ class InitializationOptions(BaseModel):
1414
server_name: str
1515
server_version: str
1616
capabilities: ServerCapabilities
17+
instructions: str | None = None

src/mcp/server/session.py

+1
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ async def _received_request(
135135
name=self._init_options.server_name,
136136
version=self._init_options.server_version,
137137
),
138+
instructions=self._init_options.instructions,
138139
)
139140
)
140141
)

src/mcp/types.py

+2
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,8 @@ class InitializeResult(Result):
285285
"""The version of the Model Context Protocol that the server wants to use."""
286286
capabilities: ServerCapabilities
287287
serverInfo: Implementation
288+
instructions: str | None = None
289+
"""Instructions describing how to use the server and its features."""
288290

289291

290292
class InitializedNotification(Notification):

tests/client/test_session.py

+2
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ async def mock_server():
5151
prompts=None,
5252
),
5353
serverInfo=Implementation(name="mock-server", version="0.1.0"),
54+
instructions="The server instructions.",
5455
)
5556
)
5657

@@ -92,6 +93,7 @@ async def listen_session():
9293
assert result.protocolVersion == LATEST_PROTOCOL_VERSION
9394
assert isinstance(result.capabilities, ServerCapabilities)
9495
assert result.serverInfo == Implementation(name="mock-server", version="0.1.0")
96+
assert result.instructions == "The server instructions."
9597

9698
# Check that the client sent the initialized notification
9799
assert initialized_notification

tests/server/fastmcp/test_server.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,9 @@
2727
class TestServer:
2828
@pytest.mark.anyio
2929
async def test_create_server(self):
30-
mcp = FastMCP()
30+
mcp = FastMCP(instructions="Server instructions")
3131
assert mcp.name == "FastMCP"
32+
assert mcp.instructions == "Server instructions"
3233

3334
@pytest.mark.anyio
3435
async def test_non_ascii_description(self):

0 commit comments

Comments
 (0)