Skip to content

Commit 65a57cc

Browse files
committed
docs: add Xquik read context example
Signed-off-by: kriptoburak <kriptoburak@users.noreply.github.com>
1 parent 96f0bb6 commit 65a57cc

2 files changed

Lines changed: 133 additions & 0 deletions

File tree

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,13 @@ docker run -d \
7878
- Click "Add MCP Server" in the web interface
7979
- Paste the configuration and save
8080

81+
For a read-only social research example, see
82+
[`configs/proxy-xquik-read-context.yaml`](configs/proxy-xquik-read-context.yaml).
83+
It maps Xquik X/Twitter search, tweet lookup, user lookup, and reply reads into
84+
MCP tools. Keep posting, direct messages, media uploads, monitors, webhooks, and
85+
giveaway draws in the TweetClaw OpenClaw plugin so each write-like or recurring
86+
action goes through explicit user approval.
87+
8188
### Available Endpoints
8289

8390
After configuration, the service will be available at these endpoints:
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
name: "xquik-read-context"
2+
tenant: "default"
3+
4+
# Read-only X/Twitter research tools backed by Xquik.
5+
# Set XQUIK_API_KEY in the Unla runtime environment. Do not expose it as a tool
6+
# argument or paste it into prompts. Keep posts, replies, DMs, media uploads,
7+
# monitors, webhooks, and giveaway draws in TweetClaw/OpenClaw so each
8+
# write-like or recurring action receives explicit user approval.
9+
10+
routers:
11+
- server: "xquik-read-context"
12+
prefix: "/gateway/xquik"
13+
cors:
14+
allowOrigins:
15+
- "*"
16+
allowMethods:
17+
- "GET"
18+
- "OPTIONS"
19+
allowHeaders:
20+
- "Content-Type"
21+
- "Authorization"
22+
- "Mcp-Session-Id"
23+
- "mcp-protocol-version"
24+
exposeHeaders:
25+
- "Mcp-Session-Id"
26+
- "mcp-protocol-version"
27+
allowCredentials: false
28+
29+
servers:
30+
- name: "xquik-read-context"
31+
description: "Read-only X/Twitter source context through Xquik"
32+
allowedTools:
33+
- "xquik_search_tweets"
34+
- "xquik_get_tweet"
35+
- "xquik_lookup_user"
36+
- "xquik_get_tweet_replies"
37+
config:
38+
XAPIKey: '{{ env "XQUIK_API_KEY" }}'
39+
40+
tools:
41+
- name: "xquik_search_tweets"
42+
description: "Search public X/Twitter posts for source context before drafting or analysis"
43+
method: "GET"
44+
endpoint: "https://xquik.com/api/v1/x/tweets/search"
45+
headers:
46+
X-API-Key: "{{.Config.XAPIKey}}"
47+
args:
48+
- name: "query"
49+
position: "query"
50+
required: true
51+
type: "string"
52+
description: "X search syntax, keyword, account, or URL-derived query"
53+
default: ""
54+
- name: "limit"
55+
position: "query"
56+
required: false
57+
type: "number"
58+
description: "Maximum posts to return"
59+
default: 20
60+
responseBody: |-
61+
{
62+
"tweets": {{ toJSON .Response.Data.tweets }},
63+
"total": {{ .Response.Data.total }}
64+
}
65+
66+
- name: "xquik_get_tweet"
67+
description: "Look up one public X/Twitter post with engagement metrics"
68+
method: "GET"
69+
endpoint: "https://xquik.com/api/v1/x/tweets/{{.Args.tweetId}}"
70+
headers:
71+
X-API-Key: "{{.Config.XAPIKey}}"
72+
args:
73+
- name: "tweetId"
74+
position: "path"
75+
required: true
76+
type: "string"
77+
description: "Tweet ID to inspect"
78+
default: ""
79+
responseBody: |-
80+
{
81+
"tweet": {{ toJSON .Response.Data.tweet }},
82+
"author": {{ toJSON .Response.Data.author }}
83+
}
84+
85+
- name: "xquik_lookup_user"
86+
description: "Look up an X/Twitter user profile by username"
87+
method: "GET"
88+
endpoint: "https://xquik.com/api/v1/x/users/{{.Args.username}}"
89+
headers:
90+
X-API-Key: "{{.Config.XAPIKey}}"
91+
args:
92+
- name: "username"
93+
position: "path"
94+
required: true
95+
type: "string"
96+
description: "Username without @"
97+
default: ""
98+
responseBody: |-
99+
{
100+
"user": {{ toJSON .Response.Data }}
101+
}
102+
103+
- name: "xquik_get_tweet_replies"
104+
description: "Collect reply context for a public X/Twitter post"
105+
method: "GET"
106+
endpoint: "https://xquik.com/api/v1/x/tweets/{{.Args.tweetId}}/replies"
107+
headers:
108+
X-API-Key: "{{.Config.XAPIKey}}"
109+
args:
110+
- name: "tweetId"
111+
position: "path"
112+
required: true
113+
type: "string"
114+
description: "Tweet ID whose replies should be read"
115+
default: ""
116+
- name: "cursor"
117+
position: "query"
118+
required: false
119+
type: "string"
120+
description: "Pagination cursor from a previous response"
121+
default: ""
122+
responseBody: |-
123+
{
124+
"tweets": {{ toJSON .Response.Data.tweets }},
125+
"nextCursor": "{{.Response.Data.nextCursor}}"
126+
}

0 commit comments

Comments
 (0)