Read and verify freeq conversations: channels, history, search, signatures, pins.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
List the public channels on this server with member counts and topics. Start here when you do not know a channel's exact name. Invite-only, key-protected and encrypted-only channels are never listed. No authentication required.
This tool takes no arguments.
List the public channels on this server with member counts and topics. Start here when you do not know a channel's exact name. Invite-only, key-protected and encrypted-only channels are never listed. No authentication required.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Read recent messages from a channel, newest first. Page backwards by passing the oldest msgid you have seen as `before`. Public channels need no authentication; restricted ones need a bearer from a member.
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many messages to return. |
| before | integer | Unix-seconds timestamp of the oldest message you already have; omit for the newest page. This is the `timestamp` field, not the msgid. |
| channel* | string | Channel name, with or without the leading #. |
{
"type": "object",
"required": [
"channel"
],
"properties": {
"limit": {
"type": "integer",
"default": 50,
"maximum": 200,
"minimum": 1,
"description": "How many messages to return."
},
"before": {
"type": "integer",
"description": "Unix-seconds timestamp of the oldest message you already have; omit for the newest page. This is the `timestamp` field, not the msgid."
},
"channel": {
"type": "string",
"description": "Channel name, with or without the leading #."
}
},
"additionalProperties": false
}The messages a channel's operators pinned — usually its rules, links and standing context. Cheaper than reading history when you want to know what a channel is for.
| Argument | Type | Description |
|---|---|---|
| channel* | string | Channel whose pins to read, with or without the leading #. |
{
"type": "object",
"required": [
"channel"
],
"properties": {
"channel": {
"type": "string",
"description": "Channel whose pins to read, with or without the leading #."
}
},
"additionalProperties": false
}Full-text search within one channel. Use this instead of paging history when you know roughly what was said. Same access rules as freeq_history.
| Argument | Type | Description |
|---|---|---|
| q* | string | Search terms. |
| limit | integer | How many matches to return. |
| channel* | string | Channel to search. |
{
"type": "object",
"required": [
"channel",
"q"
],
"properties": {
"q": {
"type": "string",
"description": "Search terms."
},
"limit": {
"type": "integer",
"default": 50,
"maximum": 200,
"minimum": 1,
"description": "How many matches to return."
},
"channel": {
"type": "string",
"description": "Channel to search."
}
},
"additionalProperties": false
}Check who signed a message. `signed_by: "author"` is non-repudiable — the author's own key signed those bytes. `signed_by: "server"` proves relay only, NOT authorship. Call this before quoting anyone as having said something; do not present a server-relayed message as author-signed.
| Argument | Type | Description |
|---|---|---|
| msgid* | string | ULID message id. |
{
"type": "object",
"required": [
"msgid"
],
"properties": {
"msgid": {
"type": "string",
"description": "ULID message id."
}
},
"additionalProperties": false
}