Skip to main content
Glama

get_member

Retrieve subscriber details from a Mailchimp audience using their email address and list ID.

Instructions

Get details for a specific subscriber by email address.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
list_idYes
emailYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Implementation Reference

  • The get_member tool handler: retrieves details for a specific subscriber by email address. It hashes the email via mc.subscriber_hash(email), calls the Mailchimp API at /lists/{list_id}/members/{hash}, and returns a formatted response with email, status, full_name, merge fields, rating, tags, VIP status, source, IP, language, location, subscription timestamp, and last changed date.
    @mcp.tool()
    async def get_member(list_id: str, email: str) -> str:
        """Get details for a specific subscriber by email address."""
        mc = get_client()
        h = mc.subscriber_hash(email)
        m = await mc.get(f"/lists/{list_id}/members/{h}")
        merge = m.get("merge_fields", {})
        return _fmt({
            "email": m.get("email_address", ""),
            "status": m.get("status", ""),
            "full_name": m.get("full_name", ""),
            "first_name": merge.get("FNAME", ""),
            "last_name": merge.get("LNAME", ""),
            "rating": m.get("member_rating", 0),
            "tags_count": m.get("tags_count", 0),
            "vip": m.get("vip", False),
            "source": m.get("source", ""),
            "ip_signup": m.get("ip_signup", ""),
            "language": m.get("language", ""),
            "location": m.get("location", {}),
            "subscribed_at": m.get("timestamp_opt", ""),
            "last_changed": m.get("last_changed", ""),
            "id": m.get("id", ""),
        })
  • The tool is registered via the @mcp.tool() decorator on the get_member async function, making it available as an MCP tool named 'get_member' through the FastMCP framework.
    @mcp.tool()
    async def get_member(list_id: str, email: str) -> str:
        """Get details for a specific subscriber by email address."""
        mc = get_client()
        h = mc.subscriber_hash(email)
        m = await mc.get(f"/lists/{list_id}/members/{h}")
        merge = m.get("merge_fields", {})
        return _fmt({
            "email": m.get("email_address", ""),
            "status": m.get("status", ""),
            "full_name": m.get("full_name", ""),
            "first_name": merge.get("FNAME", ""),
            "last_name": merge.get("LNAME", ""),
            "rating": m.get("member_rating", 0),
            "tags_count": m.get("tags_count", 0),
            "vip": m.get("vip", False),
            "source": m.get("source", ""),
            "ip_signup": m.get("ip_signup", ""),
            "language": m.get("language", ""),
            "location": m.get("location", {}),
            "subscribed_at": m.get("timestamp_opt", ""),
            "last_changed": m.get("last_changed", ""),
            "id": m.get("id", ""),
        })
  • The subscriber_hash helper method used by get_member: it computes the MD5 hash of the lowercase, trimmed email address, which is how Mailchimp identifies subscribers in API endpoints.
    @staticmethod
    def subscriber_hash(email: str) -> str:
        """MD5 hash of lowercase email — Mailchimp's subscriber identifier."""
        return hashlib.md5(email.lower().strip().encode()).hexdigest()
  • The _fmt helper function used by get_member to format the response as indented JSON.
    def _fmt(data: Any) -> str:
        """Format response data as indented JSON string."""
        return json.dumps(data, indent=2, default=str)
Behavior2/5

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

No annotations provided, so description carries the full burden. It only states 'Get details' without disclosing what specific details are returned, potential errors, rate limits, or authentication requirements. This is insufficient for a tool with no annotation safety net.

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?

Single sentence that is direct and to the point. No redundancy, front-loaded with purpose. Perfect conciseness for the information provided.

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

Completeness3/5

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

Output schema exists but contents unknown; description does not clarify what 'details' encompasses. Lacks context on prerequisites (e.g., API key), error handling, or expected behavior if email not found. Adequate for a minimal read operation but could be enriched.

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

Parameters2/5

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

Schema description coverage is 0%. The description explains the 'email' parameter as the identifier but does not clarify 'list_id' or its purpose. With two required parameters and only one explained, the added value is low.

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

Purpose5/5

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

Description clearly states the action ('Get details'), the resource ('a specific subscriber'), and the identifier method ('by email address'). This distinguishes it from siblings like list_members which returns multiple members, and get_member_activity which focuses on activity.

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

Usage Guidelines3/5

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

Implicitly suggests use when needing a single subscriber's details by email, but no explicit guidance on when not to use (e.g., if email unknown) or alternatives like search_members. The context is clear but lacks exclusions or comparisons.

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/AlexlaGuardia/mcp-mailchimp'

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