Skip to main content
Glama
Octodamus

Octodamus Market Intelligence

Official

subscribe_to_octodamus

Subscribe an email to receive oracle signals, Polymarket edge alerts, and macro regime updates. Confirms subscription with a welcome message.

Instructions

Subscribe an email address to the Octodamus Market Intelligence Digest. Subscribers receive oracle signals, Polymarket edge alerts, and macro regime updates. Confirms subscription with a welcome message.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
emailYesValid email address to subscribe, e.g. trader@example.com

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYesOracle response text with signal data, analysis, or confirmation

Implementation Reference

  • Primary handler for subscribe_to_octodamus tool. Validates email, calls octo_distro.subscribe(), handles already_subscribed status, and returns welcome message with subscriber count.
    @mcp.tool(description="Subscribe an email address to the Octodamus Market Intelligence Digest -- free weekly signal summary")
    def subscribe_to_octodamus(email: str) -> TextResult:
        """Subscribe to the free Market Intelligence Digest. Weekly signals, oracle calls, macro pulse."""
        try:
            from octo_distro import subscribe
            result = subscribe(email, source="mcp")
            if result.get("ok"):
                status = result.get("status", "subscribed")
                if status == "already_subscribed":
                    return TextResult(result=(
                        f"Already subscribed: {email}\n"
                        "You're on the Market Intelligence Digest list.\n"
                        "Follow @octodamusai on X for live oracle calls.\n"
                        "Free API key: POST https://api.octodamus.com/v1/signup?email="
                    ))
                total = result.get("total", "")
                return TextResult(result=(
                    f"Subscribed: {email}\n"
                    f"Welcome to the Market Intelligence Digest. You are subscriber #{total}.\n"
                    "You'll receive weekly signals, macro pulse scores, oracle call reviews, and Polymarket edges.\n"
                    "Follow @octodamusai on X for live posts.\n"
                    "Free API key (500 req/day): POST https://api.octodamus.com/v1/signup?email="
                ))
            return TextResult(result=f"Subscribe failed: {result.get('reason', 'unknown error')}")
        except Exception as e:
            return TextResult(result=f"Subscribe unavailable: {e}")
  • Tool registration via @mcp.tool decorator with description 'Subscribe an email address to the Octodamus Market Intelligence Digest -- free weekly signal summary'.
    @mcp.tool(description="Subscribe an email address to the Octodamus Market Intelligence Digest -- free weekly signal summary")
  • Secondary handler for subscribe_to_octodamus tool. Directly calls the Octodamus API via HTTP POST, validates email format, handles both success and fallback cases.
    @mcp.tool(
        description=(
            "Subscribe an email address to the Octodamus Market Intelligence Digest. "
            "Subscribers receive oracle signals, Polymarket edge alerts, and macro regime updates. "
            "Confirms subscription with a welcome message."
        )
    )
    def subscribe_to_octodamus(
        email: Annotated[str, Field(description="Valid email address to subscribe, e.g. trader@example.com")],
    ) -> TextResult:
        import urllib.request, urllib.parse, json
        if not email or "@" not in email or "." not in email.split("@")[-1]:
            return TextResult(result="Please provide a valid email address (e.g. trader@example.com).")
        try:
            encoded = urllib.parse.quote(email.strip())
            url = f"https://api.octodamus.com/subscribe/newsletter?email={encoded}"
            req = urllib.request.Request(url, method="POST", headers={"User-Agent": "octodamus-mcp/1.0"})
            with urllib.request.urlopen(req, timeout=8) as r:
                data = json.load(r)
            msg = data.get("message", data.get("status", "Subscribed successfully."))
            return TextResult(result=(
                f"Subscribed: {email}\n{msg}\n\n"
                f"You will receive: BUY/SELL/HOLD signals, Polymarket edge alerts, and macro regime updates from @octodamusai."
            ))
        except Exception:
            encoded = urllib.parse.quote(email.strip())
            return TextResult(result=(
                f"Subscribed: {email}\n"
                f"Confirm at: https://api.octodamus.com/subscribe/newsletter?email={encoded}\n\n"
                f"You will receive: oracle signals, Polymarket edges, and macro regime updates from @octodamusai."
            ))
  • server.py:207-216 (registration)
    Tool registration via @mcp.tool decorator with description about oracle signals, Polymarket edge alerts, and macro regime updates.
    @mcp.tool(
        description=(
            "Subscribe an email address to the Octodamus Market Intelligence Digest. "
            "Subscribers receive oracle signals, Polymarket edge alerts, and macro regime updates. "
            "Confirms subscription with a welcome message."
        )
    )
    def subscribe_to_octodamus(
        email: Annotated[str, Field(description="Valid email address to subscribe, e.g. trader@example.com")],
    ) -> TextResult:
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It states the subscription confirmation via welcome message but lacks details on error handling, duplicate subscriptions, or data usage. Adequate for a simple subscription but could be more explicit.

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?

Three sentences, front-loaded with the core action, no redundant information. Every sentence adds value.

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

Completeness5/5

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

Given the simple single-parameter tool with an output schema, the description covers the purpose, content of subscription, and confirmation. No missing context needed for correct invocation.

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 description coverage is 100% with a clear example. The tool description does not add extra meaning beyond the schema's parameter description, meeting baseline expectation.

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?

The description clearly states the action (subscribe an email address) and the resource (Octodamus Market Intelligence Digest), and distinguishes from sibling tools like 'ask_oracle' or 'get_market_brief' which are not subscription-related.

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?

The description implies usage context (when wanting to subscribe to the digest) but does not specify when not to use it, prerequisites, or alternatives. However, no sibling tool offers a similar function, so ambiguity is minimal.

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/Octodamus/octodamus-core'

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