Finally Offline

Human culture news, trends and search across sports, music, fashion and streetwear.

Should I use this

Quality & Safety

A
Description quality
97%
Schema completeness
94%
Naming quality
94%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,270Tokens (tool definitions)
~1.6 KBTypical response size
Moderate attention impact (0.99% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "culture": {
      "url": "https://www.finallyoffline.com/mcp"
    }
  }
}

Remote endpoints

https://www.finallyoffline.com/mcpstreamable-http

What it can do

Tool inventory

Tools (7)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟡register_agent(agent_name, operator_name, operator_website, contact_email, usage_purpose, ...)

Register an integration with a self-reported operator profile. Returns a new server-owned agent_id and a one-time agent_token. Save the token securely. It identifies this integration, not a verified person. Public reading needs no registration.

Input Schema

{
  "type": "object",
  "properties": {
    "agent_name": {
      "type": "string",
      "maxLength": 120,
      "description": "Name of your integration"
    },
    "operator_name": {
      "type": "string",
      "maxLength": 160,
      "description": "Person, team or company operating it (self-reported)"
    },
    "operator_website": {
      "type": "string",
      "maxLength": 2048,
      "description": "Optional public HTTPS website"
    },
    "contact_email": {
      "type": "string",
      "maxLength": 254,
      "description": "Optional contact address, self-reported and not email verified"
    },
    "usage_purpose": {
      "type": "string",
      "maxLength": 500,
      "description": "How this integration uses Finally Offline content"
    },
    "is_test": {
      "type": "boolean",
      "default": false,
      "description": "Mark your own diagnostic/test integration"
    }
  },
  "required": [
    "agent_name",
    "operator_name"
  ]
}
🟢get_culture_news(category, limit, since, agent_token)

Get the latest human culture news from Finally Offline. Covers sports, music, fashion, and general culture.

Input Schema

{
  "type": "object",
  "properties": {
    "category": {
      "type": "string",
      "enum": [
        "sports",
        "music",
        "fashion",
        "culture",
        "all"
      ],
      "description": "Filter by category. Use 'all' for everything.",
      "default": "all"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20,
      "description": "Number of articles to return (1-20)",
      "default": 10
    },
    "since": {
      "type": "string",
      "enum": [
        "1h",
        "24h",
        "7d",
        "30d"
      ],
      "description": "Time window for articles",
      "default": "24h"
    },
    "agent_token": {
      "type": "string",
      "description": "Credential from register_agent. Alternative to Authorization: Bearer. Never put it in URLs."
    }
  }
}
🟢get_trending_topics(timeframe, agent_token)

Get what's trending right now in human culture. Returns topic frequency analysis, top headlines per category, and cultural pulse data. Perfect for agents that need to stay current.

Input Schema

{
  "type": "object",
  "properties": {
    "timeframe": {
      "type": "string",
      "enum": [
        "today",
        "this_week",
        "this_month"
      ],
      "description": "Time window for trending analysis",
      "default": "this_week"
    },
    "agent_token": {
      "type": "string",
      "description": "Credential from register_agent. Alternative to Authorization: Bearer. Never put it in URLs."
    }
  }
}
🟢search_articles(query, limit, agent_token)

Full-text search across all Finally Offline articles. Find specific topics, people, events, or trends in the archive.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Search query (e.g. 'NBA draft', 'streetwear', 'Drake')"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20,
      "description": "Number of results to return",
      "default": 5
    },
    "agent_token": {
      "type": "string",
      "description": "Credential from register_agent. Alternative to Authorization: Bearer. Never put it in URLs."
    }
  },
  "required": [
    "query"
  ]
}
⚪subscribe(agent_id, agent_name, webhook_url, enabled, categories, ...)

Enable or disable digest access for your authenticated integration. Register first. Automatic webhook delivery is not enabled; omit webhook_url.

Input Schema

{
  "type": "object",
  "properties": {
    "agent_id": {
      "type": "string",
      "description": "Optional consistency check: must match your credential's server-generated ID"
    },
    "agent_name": {
      "type": "string",
      "description": "Optional attribution label; does not change the registered profile"
    },
    "webhook_url": {
      "type": [
        "string",
        "null"
      ],
      "description": "Automatic webhook delivery is unavailable. Omit for digest access; null removes an existing webhook."
    },
    "enabled": {
      "type": "boolean",
      "default": true,
      "description": "false disables this subscription"
    },
    "categories": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Categories to subscribe to: sports, music, fashion, culture, all",
      "default": [
        "all"
      ]
    },
    "agent_token": {
      "type": "string",
      "description": "Credential from register_agent. Alternative to Authorization: Bearer. Never put it in URLs."
    }
  },
  "required": []
}
⚪report_redistribution(agent_id, article_url, platform, agent_token)

Record an unverified self-report of sharing a Finally Offline article, attributed to your authenticated integration. Does not verify a citation or confer featured status.

Input Schema

{
  "type": "object",
  "properties": {
    "agent_id": {
      "type": "string",
      "description": "Your agent identifier"
    },
    "article_url": {
      "type": "string",
      "description": "The Finally Offline article URL that was shared"
    },
    "platform": {
      "type": "string",
      "description": "Where it was shared (e.g. 'discord', 'twitter', 'newsletter', 'chat')"
    },
    "agent_token": {
      "type": "string",
      "description": "Credential from register_agent. Alternative to Authorization: Bearer. Never put it in URLs."
    }
  },
  "required": [
    "article_url"
  ]
}
🟢generate_digest(category, since, agent_name, agent_token)

Generate a branded HTML digest for your subscribed integration. Call register_agent, then subscribe with its agent_token; use that same token here.

Input Schema

{
  "type": "object",
  "properties": {
    "category": {
      "type": "string",
      "enum": [
        "sports",
        "music",
        "fashion",
        "culture",
        "all"
      ],
      "description": "Category focus for the digest",
      "default": "all"
    },
    "since": {
      "type": "string",
      "enum": [
        "24h",
        "7d",
        "30d"
      ],
      "description": "Time window for articles",
      "default": "7d"
    },
    "agent_name": {
      "type": "string",
      "description": "Optional attribution label. The digest uses the name saved during registration."
    },
    "agent_token": {
      "type": "string",
      "description": "Credential from register_agent. Alternative to Authorization: Bearer. Never put it in URLs."
    }
  }
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded7 tools
verifiedversion not recorded6 tools