Skip to main content
Glama

add_list

Create a new list in Remember The Milk, optionally with a filter to generate a smart list.

Instructions

Create a new list.

Args: name: Name for the new list filter: Optional RTM filter to make this a smart list

Returns: Created list details with transaction ID

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameYes
filterNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • The handler function for the 'add_list' tool. Creates a new RTM list by calling rtm.lists.add with the provided name and optional filter, returns the created list details with a transaction ID.
    @mcp.tool()
    async def add_list(
        ctx: Context,
        name: str,
        filter: str | None = None,
    ) -> dict[str, Any]:
        """Create a new list.
    
        Args:
            name: Name for the new list
            filter: Optional RTM filter to make this a smart list
    
        Returns:
            Created list details with transaction ID
        """
        from ..client import RTMClient
    
        client: RTMClient = await get_client()
    
        params: dict[str, Any] = {"name": name}
        if filter:
            params["filter"] = filter
    
        result = await client.call("rtm.lists.add", require_timeline=True, **params)
    
        # Parse the created list
        lst = result.get("list", {})
        transaction_id = get_transaction_id(result)
    
        return build_response(
            data={
                "list": format_list(lst),
                "message": f"Created list: {name}",
            },
            transaction_id=transaction_id,
        )
  • Schema/type definition for add_list: takes 'name' (str, required) and 'filter' (str | None, optional), returns a dict.
    async def add_list(
        ctx: Context,
        name: str,
        filter: str | None = None,
    ) -> dict[str, Any]:
  • Registration of all list tools (including add_list) via register_list_tools called in server.py.
    register_list_tools(mcp, get_client)
  • The registration function that decorates add_list as an MCP tool via @mcp.tool() inside register_list_tools.
    def register_list_tools(mcp: Any, get_client: Any) -> None:
        """Register all list-related tools."""
    
        @mcp.tool()
        async def get_lists(
            ctx: Context,
            include_archived: bool = False,
            include_smart: bool = True,
        ) -> dict[str, Any]:
            """Get all RTM lists.
    
            Args:
                include_archived: Include archived lists (default: false)
                include_smart: Include smart lists (default: true)
    
            Returns:
                List of all lists with metadata
            """
            from ..client import RTMClient
    
            client: RTMClient = await get_client()
    
            result = await client.call("rtm.lists.getList")
            lists = parse_lists_response(result)
    
            # Filter based on preferences
            if not include_archived:
                lists = [lst for lst in lists if not lst["archived"]]
            if not include_smart:
                lists = [lst for lst in lists if not lst["smart"]]
    
            # Sort by position
            lists.sort(key=lambda x: (x["position"] if x["position"] >= 0 else 9999, x["name"]))
    
            return build_response(
                data={
                    "lists": [format_list(lst) for lst in lists],
                    "count": len(lists),
                },
            )
    
        @mcp.tool()
        async def add_list(
            ctx: Context,
            name: str,
            filter: str | None = None,
        ) -> dict[str, Any]:
            """Create a new list.
    
            Args:
                name: Name for the new list
                filter: Optional RTM filter to make this a smart list
    
            Returns:
                Created list details with transaction ID
            """
            from ..client import RTMClient
    
            client: RTMClient = await get_client()
    
            params: dict[str, Any] = {"name": name}
            if filter:
                params["filter"] = filter
    
            result = await client.call("rtm.lists.add", require_timeline=True, **params)
    
            # Parse the created list
            lst = result.get("list", {})
            transaction_id = get_transaction_id(result)
    
            return build_response(
                data={
                    "list": format_list(lst),
                    "message": f"Created list: {name}",
                },
                transaction_id=transaction_id,
            )
  • Helper imports used by add_list: build_response, format_list, get_transaction_id, and parse_lists_response from the response builder module.
    from ..response_builder import (
        build_response,
        format_list,
        get_transaction_id,
        parse_lists_response,
    )
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It mentions creation and return of details but does not disclose permissions, side effects, or constraints like maximum list count.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is very concise with a clear Args and Returns format. Every sentence is necessary and no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and low schema coverage, the description is too sparse. It lacks context about errors, permissions, or integration with other features like smart lists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description must compensate. It explains 'name' as the list name and 'filter' as making it a smart list. This adds value but is minimal; more details on format or constraints would help.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create a new list,' which is a specific verb and resource. It distinguishes from siblings like add_note and add_task, but not from other list tools like rename_list. Still, it is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives (e.g., add_task, rename_list). The description does not mention prerequisites or context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

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/ljadach/rtm-mcp'

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