rzhunemogu-mcp
It gives AI agents access to the rzhunemogu.ru humor archive through 7 MCP tools.
List all joke categories with record counts and 18+ flags.
Fetch a random joke, optionally from a specific category.
Retrieve a specific joke by numeric ID.
Browse jokes in a category with pagination.
Full-text search jokes by keywords.
Get the most popular tags.
View site statistics: joke, category, and tag counts plus last update date.
РжуНеМогу MCP Server
MCP-сервер, который открывает данные крупнейшего русскоязычного архива юмора rzhunemogu.ru для любых ИИ-агентов.
Более 46 000 анекдотов, смешных рассказов, афоризмов, тостов и статусов доступны через стандартный протокол Model Context Protocol.
✨ Возможности
MCP-сервер предоставляет ИИ-агентам 7 инструментов для работы с контентом РжуНеМогу:
Инструмент | Описание |
| Все категории юмора с количеством записей |
| Случайный анекдот (по всем разделам или конкретной категории) |
| Конкретный анекдот по числовому ID |
| Анекдоты категории с пагинацией |
| Полнотекстовый поиск по ключевым словам («врач», «Штирлиц», «тёща») |
| Наиболее часто используемые теги |
| Статистика сайта (число анекдотов, категорий, тегов) |
Related MCP server: Rendobar MCP Server
🚀 Быстрый старт
Подключение как клиент (рекомендуемый способ)
Общедоступный экземпляр сервера уже развёрнут:
URL: https://rzhunemogu.ru/mcp
Транспорт: streamable HTTPДобавьте в конфигурацию вашего MCP-клиента:
{
"mcpServers": {
"rzhunemogu": {
"url": "https://rzhunemogu.ru/mcp"
}
}
}Запуск собственного экземпляра
git clone https://github.com/yourname/rzhunemogu-mcp.git
cd rzhunemogu-mcp
npm install
npm run build
# Настройте подключение к PostgreSQL
export DATABASE_URL="postgres://user:password@localhost:5432/rzhunemogu"
# Запуск в режиме streamable HTTP (порт 8081)
export TRANSPORT=http PORT=8081
npm start
# Или в режиме stdio (для локальных агентов)
export TRANSPORT=stdio
npm startТребования к базе данных
Сервер работает с PostgreSQL 16. Схема:
jokes— контент (id, category_id, content, created_at, is_published)categories— категории (id, slug, title, is_adult)tags— теги (id, name)joke_tags— связи анекдот-тег
Полнотекстовый поиск использует русский словарь PostgreSQL (to_tsvector('russian', content)).
🛠 Структура проекта
mcp-server/
├── src/
│ ├── index.ts # Регистрация инструментов + HTTP/stdio запуск
│ ├── query.ts # SQL-запросы к базе данных
│ └── db.ts # Пул подключений PostgreSQL
├── package.json
├── tsconfig.json
└── mcp.json # Метаданные для реестра MCP📦 Публикация в реестре MCP
Сервер зарегистрирован в официальном метареестре MCP через mcp.json и доступен в каталогах: Glama, Smithery, mcp.directory, mcp.so.
📄 Лицензия
Проект распространяется под лицензией MIT.
Контент (анекдоты, рассказы, афоризмы) принадлежит rzhunemogu.ru и распространяется с указанием ссылки на источник.
🤝 Связь
Сайт: rzhunemogu.ru
E-mail: support@RzhuNeMogu.ru
Разработчик: MihaNikUs
Available Tools
7 toolsget_joke_by_idАнекдот по IDA
Возвращает запись юмора по её числовому ID. ID можно получить из search_jokes или random_joke (поле id). Только чтение, без побочных эффектов. Если записи с таким ID нет или она не опубликована — возвращается текст «Анекдот с таким ID не найден».
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Числовой ID записи (например, 13438). Должен быть целым положительным. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden: it declares the read-only, side-effect-free nature ('Только чтение, без побочных эффектов') and specifies the exact fallback behavior when the ID is missing or unpublished. That not-found text is critical behavioral context an agent needs to interpret the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with purpose, then the parameter source, then behavior. Every sentence earns its place with no repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-param lookup with no output schema, the description covers purpose, ID provenance, safety, and the not-found case. A brief note on the successful return shape (fields returned) would make it complete, but nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and includes the integer/positive constraint, so the schema does the heavy lifting. The description adds provenance for the ID value (from search_jokes or random_joke) which the schema does not state, giving it slight value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Возвращает запись юмора по её числовому ID') and clearly distinguishes from siblings (search_jokes, random_joke, get_jokes_by_category) by being a direct ID lookup. An agent can immediately tell what this tool does and how it differs from the search/list siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs where to obtain the ID ('ID можно получить из search_jokes или random_joke'), which tells the agent when to use this tool after those alternatives. No explicit exclusions, but the dependency chain is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_jokes_by_categoryАнекдоты по категорииA
Возвращает список записей конкретной категории с пагинацией, отсортированных от новых к старым по id (по убыванию). categoryId обязателен (возьми из list_categories). limit — до 50 записей за раз (по умолчанию 15), offset — смещение для пагинации. Только чтение, без побочных эффектов. Ответ содержит total (всего записей в категории) и items (список). Для постраничного просмотра увеличивай offset кратно limit.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Количество записей за один вызов (1-50). По умолчанию 15. | |
| offset | No | Смещение от начала списка для пагинации. По умолчанию 0. | |
| categoryId | Yes | ID категории (из list_categories), например 1 для «Анекдоты». Обязателен. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it declares read-only with no side effects, discloses the sort order, and explains the response shape (total plus items). It lacks any note on auth or rate limits, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and ordering, then parameters, then response shape, in four tight sentences. There is mild duplication of the limit and categoryId rules already present in the schema, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description explains that the response contains total and items, and covers pagination mechanics plus the required categoryId source. An agent has everything needed to call it correctly on the first try.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all three parameters including min/max and defaults. The description restates limit default 15 and max 50 and adds only the procedural hint of stepping offset by limit, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Возвращает список записей конкретной категории') plus the ordering (newest to oldest by descending id). It does not explicitly contrast with the nearest sibling search_jokes, so an agent must infer that distinction, but the scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives actionable context: categoryId must come from list_categories, and pagination is driven by increasing offset in multiples of limit. It does not state when to prefer search_jokes or random_joke instead, so alternatives are implied rather than excluded.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_categoriesСписок категорийA
Возвращает полный список категорий юмора на РжуНеМогу: id, slug, название, признак «18+», количество опубликованных записей. Только чтение, без побочных эффектов. Ответ — JSON-массив в поле content[0].text. Используй id из этого списка как categoryId в random_joke/get_jokes_by_category.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden and does well: it explicitly states the operation is read-only with no side effects and describes the response format as a JSON array in content[0].text. It does not cover ordering, pagination, or error behavior, but for a simple list tool this is largely sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it identifies the resource, lists returned fields, states safety, gives response format, and explains downstream usage in just a few sentences. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description steps up by explaining the return shape and fields, and by stating read-only behavior. It is nearly complete, though it could mention ordering or whether categories are static to be fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero input parameters, so the baseline is 4. The description adds useful output semantics by indicating that the returned id field maps to categoryId in other tools, though there are no input parameters to clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: returns the full list of humor categories, and names the exact fields included. It is clearly distinguishable from sibling tools like get_jokes_by_category, which lists jokes rather than categories.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that returned ids should be used as categoryId in random_joke and get_jokes_by_category, which is useful downstream context. However, it does not say when to choose this tool over similar siblings like popular_tags or search_jokes, leaving alternative selection implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
popular_tagsПопулярные тегиA
Возвращает наиболее часто используемые теги записей, отсортированные по убыванию частоты (count). Показывает темы, чаще всего встречающиеся в базе РжуНеМогу. Только чтение, без побочных эффектов. limit задаёт сколько тегов вернуть (1-100, по умолчанию 30). Каждый тег — {name, count}, где count — число записей с этим тегом.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Сколько тегов вернуть (1-100). По умолчанию 30. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and explicitly declares read-only behavior with no side effects, descending frequency sorting, the default limit, and the returned {name, count} shape. It omits auth, rate-limit, and empty-result behavior, but for a simple public read this is a strong disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded with purpose and sorting, then covers safety, limit, and return shape in four tight sentences. The second sentence is mildly redundant with the first but still adds contextual value, keeping the overall structure efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-parameter read tool with no output schema, the description supplies the missing return format ({name, count}) and safety profile, so an agent has enough information to call it correctly. No critical context is missing for this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single optional limit parameter is already fully documented with range and default. The description repeats the same limit semantics rather than adding new meaning, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: returns the most frequently used entry tags, sorted by descending frequency. The resource ('tags') is distinct from sibling resources like list_categories and search_jokes, so an agent can identify the tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context by saying it shows the topics most often found in the database, which implies when the tool is useful. However, it does not explicitly contrast this with siblings such as list_categories or search_jokes, and it names no exclusions or when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
random_jokeСлучайный анекдотA
Возвращает одну случайную запись (анекдот/историю/афоризм) из базы РжуНеМогу. Если указан categoryId — выбирается случайная запись только из этой категории; иначе из всех опубликованных, включая категории 18+. Только чтение, без побочных эффектов. Повторные вызовы с тем же аргументом могут вернуть разные записи (детерминированности нет). При отсутствии записей в категории возвращается текст «Анекдот не найден».
| Name | Required | Description | Default |
|---|---|---|---|
| categoryId | No | ID категории (из list_categories). Если опущен — случайная запись из любой категории, включая 18+. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it declares read-only/no side effects, warns that repeated calls with the same argument are non-deterministic, and describes the empty-category fallback string «Анекдот не найден». It omits permission/auth requirements and whether the 18+ inclusion can be suppressed, which keeps it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core behavior, then conditional logic, safety, non-determinism, and the empty-result case – every sentence carries real information. Slightly dense in a single block but no wasted clauses.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description does explain the return (one random record, or the literal fallback text). It is a bit vague about the shape/fields of the returned record (id, text, category, tags) and about the 18+ flag, which is the main remaining gap for a single-parameter read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the parameter's own description already explains the category filter and the default of any category including 18+. The description restates this rather than adding format or lookup guidance beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: returns one random record (joke/story/aphorism) from the РжуНеМогу database. The randomness and single-item scope immediately distinguish it from siblings like get_jokes_by_category and search_jokes, so an agent can pick it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly states the two usage modes: with categoryId it samples only that category, without it samples all published records including 18+. It does not name an alternative tool or explicitly say when not to use it (e.g. 'for a specific joke use get_joke_by_id'), so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_jokesПоиск анекдотовA
Полнотекстовый поиск записей по ключевым словам на русском языке (например, «врач», «Штирлиц», «тёща», «теща»). Использует морфологию русского языка PostgreSQL: word-формы приводятся к основе, поэтому «врач» найдёт и «врачи», «врачом» и т.п. Результаты отсортированы по релевантности (ts_rank). query обязателен; поиск без него вернёт пустой результат. Только чтение, без побочных эффектов. limit до 50 (по умолчанию 15), offset для пагинации.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Количество результатов (1-50). По умолчанию 15. | |
| query | Yes | Поисковый запрос (одно или несколько слов, поддерживается русская морфология). Пример: «про врача». | |
| offset | No | Смещение для пагинации. По умолчанию 0. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses read-only/no-side-effects, relevance ordering via ts_rank, stemming behavior, and the empty-result consequence of a missing query. What it omits is the shape of returned records, but that is a modest gap for a read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what the tool is and the stemming example, then constraints, then pagination. Mostly efficient, though the limit default/ceiling restatement duplicates the schema and could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter read-only search with no output schema, the description covers ranking, language/morphology, required query, and pagination. Only the returned record shape is unaddressed, which is a minor omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so limit/offset defaults and bounds are already documented and the description largely repeats them. The one genuine addition is the morphology explanation showing that 'врач' matches 'врачи'/'врачом', which clarifies query semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: full-text keyword search over joke records, with Russian-language scope and ranking. It is clear what the tool does, but it never names how it differs from siblings such as get_jokes_by_category or random_joke, leaving that inference to the agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'query обязателен; поиск без него вернёт пустой результат' tells the agent the parameter is mandatory but not when to prefer search over category browsing or random retrieval. No explicit when-to-use or when-not-to-use guidance appears.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_statsСтатистика сайтаA
Возвращает общую статистику базы РжуНеМогу: число опубликованных записей (total_jokes), число категорий (total_categories), число уникальных тегов (total_tags) и дату последнего обновления (last_update). Полезно для получения общего представления о размере и активности базы. Только чтение, без побочных эффектов. Стоимость вызова мала по сравнению с поиском — подходит для быстрых проверок доступности.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: it declares read-only, no side effects, and low call cost relative to search. It also lists the returned metrics, compensating for the absence of an output schema. It stops short of stating anything about the freshness/update mechanics of the stats themselves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what is returned, then adds usefulness and cost context in efficient sentences. Slight redundancy between the 'general idea of size and activity' and 'quick availability checks' sentences, but nothing wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A zero-parameter tool with no output schema, yet the description enumerates every returned field and adds the read-only/cost profile. An agent has everything needed to call it correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline of 4 applies. There is no parameter to document and the description correctly keeps the focus on returned values instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (returns statistics) and resource (the database), and enumerates the exact fields returned: total_jokes, total_categories, total_tags, last_update. An agent can immediately tell this apart from the sibling search/list tools without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly positions the tool for a 'general idea of database size and activity' and for 'quick availability checks', and contrasts its low cost with searching. Clear usage context, though it names no explicit when-not-to-use or alternative sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v1.0.0- Changed
get_joke_by_id1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Числовой ID анекдота"New value: +"Числовой ID записи (например, 13438). Должен быть целым положительным."
- Changed
get_jokes_by_category3 fields changed- changed
Input schema / properties / categoryId / descriptionPrevious value: -"ID категории"New value: +"ID категории (из list_categories), например 1 для «Анекдоты». Обязателен." - changed
Input schema / properties / limit / descriptionPrevious value: -"Сколько записей (по умолчанию 15)"New value: +"Количество записей за один вызов (1-50). По умолчанию 15." - changed
Input schema / properties / offset / descriptionPrevious value: -"Смещение для пагинации (по умолчанию 0)"New value: +"Смещение от начала списка для пагинации. По умолчанию 0."
- Changed
popular_tags1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Сколько тегов (по умолчанию 30)"New value: +"Сколько тегов вернуть (1-100). По умолчанию 30."
- Changed
random_joke1 field changed- changed
Input schema / properties / categoryId / descriptionPrevious value: -"ID категории (необязательно)"New value: +"ID категории (из list_categories). Если опущен — случайная запись из любой категории, включая 18+."
- Changed
search_jokes3 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Сколько записей (по умолчанию 15)"New value: +"Количество результатов (1-50). По умолчанию 15." - changed
Input schema / properties / offset / descriptionPrevious value: -"Смещение для пагинации"New value: +"Смещение для пагинации. По умолчанию 0." - changed
Input schema / properties / query / descriptionPrevious value: -"Поисковый запрос"New value: +"Поисковый запрос (одно или несколько слов, поддерживается русская морфология). Пример: «про врача»."
7 tool updates
v0.1.0- First observed
get_joke_by_id - First observed
get_jokes_by_category - First observed
list_categories - First observed
popular_tags - First observed
random_joke - First observed
search_jokes - First observed
site_stats
TDQS
Scored across 7 tools
Each tool targets a clearly distinct retrieval mode: category enumeration, single random pick, lookup by ID, paginated category listing, full-text search, tag frequency, and aggregate stats. Descriptions explicitly cross-reference each other (e.g. categoryId from list_categories feeds random_joke/get_jokes_by_category), so an agent can pick correctly. No pair of tools is genuinely interchangeable.
Most names follow a verb_noun pattern (list_categories, get_joke_by_id, get_jokes_by_category, search_jokes), but three are bare noun phrases (random_joke, popular_tags, site_stats). The deviation is minor and the intent of each name remains instantly readable. No casing inconsistency — all snake_case throughout.
Seven tools is well-scoped for a read-only joke database: discovery, retrieval by three complementary paths, search, tags, and stats. Every tool earns its place with no filler or trivially overlapping wrapper. Nothing feels thin given the narrow domain.
The read-only surface is thorough: categories, random, by ID, by category with pagination, full-text search, tags, and stats. The one noticeable gap is that popular_tags surfaces tags but no get_jokes_by_tag tool lets an agent act on them, and there is no explicit 18+ exclusion filter despite the flag being prominent. These are workarounds-able but real dead ends.
Maintenance
Related MCP Connectors
MCP server for Russian books search, details, and recommendation candidates.
MCP server for AI dialogue using various LLM models via AceDataCloud
MCP server for Qwen Image 3 AI image generation
Related MCP Servers
- AlicenseBqualityDmaintenanceA Minecraft MCP Server powered by Mineflayer API. It allows to control a Minecraft character in real-time, allowing AI assistants to build structures, explore the world, and interact with the game environment through natural language instruction22264 npm800Apache 2.0
- AlicenseAqualityAmaintenanceOfficial MCP server for Rendobar. Lets AI agents run serverless media processing and upload local files.9157 npm1MIT
- AlicenseAqualityBmaintenanceMCP server for BrewPage, a free no-signup hosting service. Lets AI agents publish HTML, Markdown, JSON, files, or a full multi-file static site and get a public URL instantly via a REST API.205Apache 2.0

@byimprint/mcp-serverofficial
AlicenseNot gradedqualityFmaintenanceRetired MCP server for byImprint's historical creator-intelligence experiment. It is no longer active.9 npmMIT