Skip to content

Specifying capabilities w/ FastMCP Server #1126

Open

Description

@chrisagrams

Question

I noticed that the FastMCP server does not have the options to manually specify the capabilities of the server, however it is possible to do so with the low-level server.

My current workaround to advertise the capabilities is like so:

mcp = FastMCP("test-server")

# Manually set notification options
lowlevel_server: Server = mcp._mcp_server
lowlevel_server.notification_options.resources_changed = True
lowlevel_server.notification_options.tools_changed = True

# Now, we override the mcp.run()
async def main():
    async with stdio_server() as (r, w):
        init_opts = lowlevel_server.create_initialization_options(
            lowlevel_server.notification_options,
            {}
        )
        await lowlevel_server.run(r, w, init_opts)

if __name__ == "__main__":
    anyio.run(main)

Is there any other way to specify the capabilities of the FastMCP server? Is there a reason not to?

Thanks!

Additional Context

No response

Activity

  1. added this to the FastMCP issues milestone on Oct 7, 2025
  2. added
    v2Affects the v2 line (2.x on main)
    enhancementRequest for a new feature that's not currently supported
    ready for workEnough information for someone to start working on
    P2Moderate issues affecting some users, edge cases, potentially valuable feature
    and removed
    questionFurther information is requested
    on Oct 7, 2025
  3. felixweinberger commented on Oct 7, 2025

    @felixweinberger
    Contributor

    This is fair and we might want to add some sane defaults versions of these methods - currently FastMCP doesn't have these.

  4. ronytesler commented on Apr 1, 2026

    @ronytesler

    Question

    I noticed that the FastMCP server does not have the options to manually specify the capabilities of the server, however it is possible to do so with the low-level server.

    My current workaround to advertise the capabilities is like so:

    mcp = FastMCP("test-server")

    Manually set notification options

    lowlevel_server: Server = mcp._mcp_server
    lowlevel_server.notification_options.resources_changed = True
    lowlevel_server.notification_options.tools_changed = True

    Now, we override the mcp.run()

    async def main():
    async with stdio_server() as (r, w):
    init_opts = lowlevel_server.create_initialization_options(
    lowlevel_server.notification_options,
    {}
    )
    await lowlevel_server.run(r, w, init_opts)

    if name == "main":
    anyio.run(main)

    Is there any other way to specify the capabilities of the FastMCP server? Is there a reason not to?

    Thanks!

    Additional Context

    No response

    I tried that but chatGPT tried to use the old tool and failed. I also tried a new chat. Was it supposed to request the updated tool list and work without errors?

  5. added
    needs decisionIssue is actionable, needs maintainer decision on whether to implement
    and removed
    ready for workEnough information for someone to start working on
    on Apr 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Moderate issues affecting some users, edge cases, potentially valuable featureenhancementRequest for a new feature that's not currently supportedneeds decisionIssue is actionable, needs maintainer decision on whether to implementv2Affects the v2 line (2.x on main)

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions