Skip to content

Commit 2ed5603

Browse files
nearestnaborsclaude
andcommitted
Add recipe validation tests
- Add js-yaml for YAML parsing in tests - Validate recipe schema matches Goose requirements: - Required fields: title, description - Content fields: instructions or prompt - Activities array present - Test-specific validations: - x-news-digest mentions x_timeline_digest tool - x-conversations mentions x_conversations tool - Content filtering rules in instructions Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 8b9ffa3 commit 2ed5603

4 files changed

Lines changed: 206 additions & 34 deletions

File tree

README.md

Lines changed: 42 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ An MCP server that provides Twitter integration with rich UI components for [Goo
77
Social media companies weaponize interfaces against humans (infinite scroll, notification anxiety, algorithmic rage bait). Agents are immune to psychological manipulation—they just execute.
88

99
ASSA reclaims the social web by:
10+
1011
- **Daily Digest**: Know what happened on Twitter without opening the app
1112
- **Post with Approval**: Agent drafts, you review a rich preview, then approve
1213

@@ -30,6 +31,7 @@ ASSA reclaims the social web by:
3031
1. **Get your Arcade API key** at [arcade.dev](https://arcade.dev)
3132

3233
2. Clone and install:
34+
3335
```bash
3436
git clone https://github.com/YOUR_USERNAME/assa-mcp
3537
cd assa-mcp
@@ -50,15 +52,17 @@ extensions:
5052
command: node
5153
args: ["/path/to/assa-mcp/dist/index.js"]
5254
env:
53-
ARCADE_API_KEY: your_api_key_here # <-- Required!
54-
ARCADE_USER_ID: you@example.com # <-- Required! Your Arcade account email
55+
ARCADE_API_KEY: your_api_key_here # <-- Required!
56+
ARCADE_USER_ID: you@example.com # <-- Required! Your Arcade account email
5557
```
5658
5759
**Important:**
60+
5861
- `ARCADE_API_KEY` - Required. Get yours at [arcade.dev](https://arcade.dev)
5962
- `ARCADE_USER_ID` - Required. Must match the email address of your Arcade account. This is used to link OAuth authorizations to your account.
6063

6164
#### Alternative: CLI setup
65+
6266
```bash
6367
goose configure
6468
# Select "Add Extension"
@@ -71,42 +75,46 @@ goose configure
7175
## Usage
7276

7377
### Check Twitter Activity
78+
7479
```
7580
Check my Twitter mentions from the last 24 hours
7681
```
7782
7883
### Get Timeline Digest
84+
7985
```
8086
Show me a digest of my Twitter timeline from the past 24 hours
8187
```
8288
8389
**Note:** Timeline digest requires Chrome running with remote debugging. See [Timeline Digest Setup](#timeline-digest-setup) below.
8490
8591
### Post a Tweet
92+
8693
```
8794
Post a tweet: "Just shipped a new feature! 🚀"
8895
```
8996
9097
### Reply to Someone
98+
9199
```
92100
Reply to @anthropic_devs saying I'll share slides after the talk
93101
```
94102
95103
## Tools
96104
97-
| Tool | Description |
98-
|------|-------------|
99-
| `x_auth_status` | Check authentication, show connect button if needed |
100-
| `x_conversations` | Show unreplied mentions as a conversation inbox |
101-
| `x_dismiss_conversation` | Dismiss a conversation (reappears on new activity) |
102-
| `x_draft_tweet` | Create draft with preview |
103-
| `x_post_tweet` | Post after approval |
104-
| `x_timeline_digest` | Fetch and summarize your Following timeline (past 24h) |
105-
| `x_show_tweet` | Display a single tweet as a rich card with reply option |
105+
| Tool | Description |
106+
| ------------------------ | ------------------------------------------------------- |
107+
| `x_auth_status` | Check authentication, show connect button if needed |
108+
| `x_conversations` | Show unreplied mentions as a conversation inbox |
109+
| `x_dismiss_conversation` | Dismiss a conversation (reappears on new activity) |
110+
| `x_draft_tweet` | Create draft with preview |
111+
| `x_post_tweet` | Post after approval |
112+
| `x_timeline_digest` | Fetch and summarize your Following timeline (past 24h) |
113+
| `x_show_tweet` | Display a single tweet as a rich card with reply option |
106114
107115
## Timeline Digest Setup
108116
109-
The timeline digest feature scrapes your Twitter Following timeline using your existing browser session. This is free (no API costs) and uses your logged-in state.
117+
The timeline digest feature accesses your X "Following" timeline using your existing browser session and Playwright. This is free (no API costs) and uses your logged-in state. (An API would be more robust, but X chooses to only make timeline API functionality available to industrial developers who can afford extortionate fees. So here we are, as hobbyists.)
110118
111119
### Prerequisites
112120
@@ -118,72 +126,71 @@ The timeline digest feature scrapes your Twitter Following timeline using your e
118126
Before using timeline digest, start Chrome with the remote debugging port:
119127
120128
**Mac:**
129+
121130
```bash
122131
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
123132
```
124133

125134
**Windows:**
135+
126136
```bash
127137
"C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222
128138
```
129139

130140
**Linux:**
141+
131142
```bash
132143
google-chrome --remote-debugging-port=9222
133144
```
134145

135-
Then make sure you're logged into Twitter/X in that browser window.
146+
Then make sure you're logged into Twitter/X in that browser window. (I keep one open and minimized on startup.)
136147

137148
### Goose Recipes
138149

139150
ASSA includes two recipes for scheduled automation:
140151

141-
| Recipe | Description |
142-
|--------|-------------|
143-
| `x-news-digest.yaml` | Daily digest of your Following timeline (requires Chrome with remote debugging) |
144-
| `x-conversations.yaml` | Check and respond to mentions/conversations |
152+
| Recipe | Description |
153+
| ---------------------- | ------------------------------------------------------------------------------- |
154+
| `x-news-digest.yaml` | Daily digest of your Following timeline (requires Chrome with remote debugging) |
155+
| `x-conversations.yaml` | Check and respond to mentions/conversations |
145156

146157
#### Import a Recipe
147158

148-
**Option 1: Generate a Deep Link**
159+
**Option 1: Follow a Deep Link**
149160

150161
```bash
151162
goose recipe deeplink recipes/x-news-digest.yaml
152163
goose recipe deeplink recipes/x-conversations.yaml
153164
```
154165

155-
This outputs a `goose://recipe?config=...` URL. Paste it in a browser to import into Goose Desktop.
166+
This outputs a `goose://recipe?config=...` URL. Paste it in a browser to preview what it will output in Goose Desktop.
156167

157168
**Option 2: Import in Goose Desktop**
158169

159170
1. Open **Goose Desktop**
160171
2. Click **Recipes** in the sidebar
161-
3. Click **Import** or browse for file
162-
4. Select a recipe from `recipes/`
172+
3. Click **Import Recipe** or browse for file
173+
4. Either past the link generated in Option 1 in the **Recipe Deeplink** input box, or choose a recipe from the `recipes/` folder in the **Recipe File** input field.
163174

164175
**Option 3: Run via CLI**
165176

177+
The outputs are in Markdown, enjoy!
178+
166179
```bash
167180
goose run --recipe recipes/x-news-digest.yaml
168-
goose run --recipe recipes/x-conversations.yaml
169181
```
170182

171-
#### Schedule a Recipe
183+
(Not recommended for `x-conversations.yaml`, which return nothing because MCP Apps are iframes.)
172184

173-
After importing, schedule recipes to run automatically:
185+
#### Schedule a Recipe
174186

175-
1. Open **Goose Desktop**
176-
2. Click **Scheduler** in the sidebar
177-
3. Click **Add** or **+**
178-
4. Select a recipe (e.g., "X News Digest")
179-
5. Set your preferred schedule
187+
After importing, on the **Recipes** screen:
180188

181-
**Cron schedule examples:**
182-
- `0 9 * * *` — 9 AM daily
183-
- `0 9 * * 1-5` — 9 AM weekdays only
184-
- `0 9,18 * * *` — 9 AM and 6 PM daily
189+
1. Click the little clock icon next the the recipe you want to automate.
190+
2. In the **Add Schedule** modal, select the frequency and time you want the recipe to run.
191+
3. Click **Save**
185192

186-
**Note:** The X News Digest requires Chrome running with `--remote-debugging-port=9222`.
193+
**Note:** X News Digest requires Chrome running with `--remote-debugging-port=9222`.
187194

188195
## Development
189196

@@ -358,6 +365,7 @@ ASSA MCP Server
358365
Built for [MCP Connect 2026](https://mcpconnect.dev) by RL.
359366

360367
Uses:
368+
361369
- [Model Context Protocol](https://modelcontextprotocol.io)
362370
- [MCP-UI](https://mcpui.dev)
363371
- [Goose](https://github.com/block/goose)

bun.lock

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,12 @@
3535
"devDependencies": {
3636
"@biomejs/biome": "^2.3.13",
3737
"@types/bun": "^1.2.0",
38+
"@types/js-yaml": "^4.0.9",
3839
"@types/node": "^20.11.0",
3940
"@types/react": "^19.0.0",
4041
"@types/react-dom": "^19.0.0",
4142
"@vitejs/plugin-react": "^4.3.4",
43+
"js-yaml": "^4.1.1",
4244
"tsx": "^4.7.0",
4345
"typescript": "^5.3.3",
4446
"ultracite": "^7.1.1",

0 commit comments

Comments
 (0)