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 recorded7 tools
verifiedversion not recorded7 tools
verifiedversion not recorded7 tools
verifiedversion not recorded7 tools
verifiedversion not recorded6 tools