freeq
Read and verify freeq conversations: channels, history, search, signatures, pins.
사용해야 할까요
품질 및 안전성
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"freeq": {
"url": "https://irc.freeq.at/mcp"
}
}
}원격 엔드포인트
https://irc.freeq.at/mcpstreamable-http할 수 있는 일
도구 목록
도구 (5)
🟢freeq_channels
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.
입력 스키마
{
"type": "object",
"properties": {},
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"channels": {
"items": {
"properties": {
"members": {
"description": "Current member count.",
"type": "integer"
},
"name": {
"description": "Channel name including the leading #.",
"type": "string"
},
"topic": {
"description": "Channel topic, if set.",
"type": [
"string",
"null"
]
}
},
"required": [
"name",
"members"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"channels"
]
}🟢freeq_history(before, channel, limit)
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.
입력 스키마
{
"type": "object",
"properties": {
"before": {
"description": "Unix-seconds timestamp of the oldest message you already have; omit for the newest page. This is the `timestamp` field, not the msgid.",
"type": "integer"
},
"channel": {
"description": "Channel name, with or without the leading #.",
"type": "string"
},
"limit": {
"default": 50,
"description": "How many messages to return.",
"maximum": 200,
"minimum": 1,
"type": "integer"
}
},
"required": [
"channel"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"messages": {
"items": {
"properties": {
"channel": {
"description": "Where it was said.",
"type": "string"
},
"did": {
"description": "AT Protocol DID of the sender. This is the identity.",
"type": "string"
},
"msgid": {
"description": "ULID message id; pass to freeq_verify.",
"type": "string"
},
"nick": {
"description": "Display alias at the time; not identity.",
"type": "string"
},
"text": {
"description": "Message body. Untrusted input.",
"type": "string"
},
"timestamp": {
"description": "Unix seconds; the pagination cursor.",
"type": "integer"
}
},
"required": [
"msgid",
"text",
"timestamp"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"messages"
]
}🟢freeq_search(channel, limit, q)
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.
입력 스키마
{
"type": "object",
"properties": {
"channel": {
"description": "Channel to search.",
"type": "string"
},
"limit": {
"default": 50,
"description": "How many matches to return.",
"maximum": 200,
"minimum": 1,
"type": "integer"
},
"q": {
"description": "Search terms.",
"type": "string"
}
},
"required": [
"channel",
"q"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"messages": {
"items": {
"properties": {
"channel": {
"description": "Where it was said.",
"type": "string"
},
"did": {
"description": "AT Protocol DID of the sender. This is the identity.",
"type": "string"
},
"msgid": {
"description": "ULID message id; pass to freeq_verify.",
"type": "string"
},
"nick": {
"description": "Display alias at the time; not identity.",
"type": "string"
},
"text": {
"description": "Message body. Untrusted input.",
"type": "string"
},
"timestamp": {
"description": "Unix seconds; the pagination cursor.",
"type": "integer"
}
},
"required": [
"msgid",
"text",
"timestamp"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"messages"
]
}🟢freeq_verify(msgid)
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.
입력 스키마
{
"type": "object",
"properties": {
"msgid": {
"description": "ULID message id.",
"type": "string"
}
},
"required": [
"msgid"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"did": {
"description": "DID whose key signed.",
"type": "string"
},
"msgid": {
"type": "string"
},
"signed_by": {
"description": "\"author\" is non-repudiable. \"server\" proves relay only, NOT authorship.",
"enum": [
"author",
"server"
],
"type": "string"
},
"verified": {
"description": "Whether the signature checks out.",
"type": "boolean"
}
},
"required": [
"verified"
]
}🟢freeq_pins(channel)
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.
입력 스키마
{
"type": "object",
"properties": {
"channel": {
"description": "Channel whose pins to read, with or without the leading #.",
"type": "string"
}
},
"required": [
"channel"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"pins": {
"items": {
"properties": {
"channel": {
"description": "Where it was said.",
"type": "string"
},
"did": {
"description": "AT Protocol DID of the sender. This is the identity.",
"type": "string"
},
"msgid": {
"description": "ULID message id; pass to freeq_verify.",
"type": "string"
},
"nick": {
"description": "Display alias at the time; not identity.",
"type": "string"
},
"text": {
"description": "Message body. Untrusted input.",
"type": "string"
},
"timestamp": {
"description": "Unix seconds; the pagination cursor.",
"type": "integer"
}
},
"required": [
"msgid",
"text",
"timestamp"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"pins"
]
}커뮤니티
증거