My Apps
Open-source Mac tools I built for my own workflowSwift
Switchboard Browser Picker
A menu-bar browser picker for macOS. Every link opens in the right browser, Chrome or Brave profile, or private window, by rule or from a picker at the cursor.
My MCP Servers
Open-source Model Context Protocol servers I built & maintainPHP
Shim MCP
Turns a WordPress site into an MCP server. WP-CLI is the transport, not a tool: no port, no token, no HTTP. Streamable HTTP is there too.
TypeScript
Amazon.in MCP
Lets AI assistants shop on Amazon.in: ranked search, full product detail, and Keepa price-history links. No API keys, runs locally over stdio.
TypeScript
Freedcamp MCP
Full read + write access to Freedcamp across every project: tasks, projects, and comments. 12 bulk-capable tools over stdio + HTTP.
Open Source Contributions
PRs to the projects I use, merged and in-flightMerged 69
taylorwilsdon/google_workspace_mcp #811
Merged
feat(permissions): non-cumulative union mode for --permissions
taylorwilsdon/google_workspace_mcp #1062
Merged
fix(gmail): prevent duplicate delivery after an ambiguous send
s-stefanov/actual-mcp #245
Merged
fix: accept a stringified "null" rule stage
Beingpax/VoiceInk #1020
Merged
Explain stuck coreaudiod instead of a generic "Recording failed to start"
thomiceli/opengist #805
Merged
Return 413 for oversized gist forms
thomiceli/opengist #812
Merged
Allow OAuth signup through invitation links
miniflux/v2 #4520
Merged
fix(karakeep): report the HTTP status when saving an entry fails
binwiederhier/ntfy #1946
Merged
Omit zero end times from Alertmanager notifications
thomiceli/opengist #810
Merged
Resolve percent-encoded Unicode topic URLs
thomiceli/opengist #811
Merged
Restore Markdown list markers
miniflux/v2 #4519
Merged
fix(ui): restart pagination when the feed or category page falls past the end
miniflux/v2 #4513
Merged
fix(fetcher): allow connecting to a proxy set through the environment
lfnovo/open-notebook #1346
Merged
fix: show insights after long-running generation
immich-app/immich #31102
Merged
fix(server): compare integrity paths independently of unicode normalization
mealie-recipes/mealie #8210
Merged
fix: allow SMTP encryption without authentication
mealie-recipes/mealie #8209
Merged
fix: show nutrition values with units in editor
mealie-recipes/mealie #8356
Merged
fix: make TypeScript generation deterministic
diced/zipline #1137
Merged
fix: #1136
diced/zipline #1138
Merged
fix: windows file uploads
Forceu/Gokapi #430
Merged
Respect custom Docker mounts in setup warnings
umami-software/umami #4496
Merged
Keep commas in search filter values
sysadminsmedia/homebox #1728
Merged
Fix Traditional Chinese label generator crash
sysadminsmedia/homebox #1727
Merged
Return barcode results when one provider fails
lfnovo/open-notebook #1345
Merged
fix(search): open matched records and deduplicate sources
lfnovo/open-notebook #1344
Merged
fix(auth): accept UTF-8 passwords
gtsteffaniak/filebrowser #2938
Merged
Fall back to buffered copies when FUSE rejects fast paths
gtsteffaniak/filebrowser #2935
Merged
Preserve deleted sidebar links across restarts
gtsteffaniak/filebrowser #2933
Merged
Support non-ASCII share passwords
kopia/kopia #5586
Merged
fix(cli): report invalid log levels for maintenance runs
mealie-recipes/mealie #8213
Merged
fix: ignore blank Paprika ingredient lines
gotify/server #1041
Merged
fix: reject password changes when local auth is disabled
umami-software/umami #4490
Merged
Keep typed page paths selectable in reports
urfave/cli #2421
Merged
Show inherited persistent flags in child help
go-jose/go-jose #285
Merged
Reject typed nil at Verify time
immich-app/immich #31074
Merged
fix(server): never unlink an untracked-file path that an asset now references
henrygd/beszel #2277
Merged
fix(hub): don't read the SSH client after it is closed
karakeep-app/karakeep #3040
Merged
fix(mobile): sort lists by name, as the web does
henrygd/beszel #2275
Merged
Warn when critical ATA SMART attributes are nonzero
navidrome/navidrome #5998
Merged
fix(subsonic): report AAC streams as audio/aac instead of audio/mp4
henrygd/beszel #2274
Merged
fix(install): generate /etc/machine-id on systems without /proc
henrygd/beszel #2272
Merged
fix(agent): don't read host CPU and memory totals from a Docker VM
thomiceli/opengist #803
Merged
Fix overlapping headers in narrow embeds
AnalogJ/scrutiny #1067
Merged
fix(collector): honor a device type set in the config file
homeassistant-ai/ha-mcp #2305
Merged
fix: allow custom dashboard screenshot dimensions
nicolargo/glances #3686
Merged
fix(WebUI): Make container IO and network columns sortable
gtsteffaniak/filebrowser #2857
Merged
fix(preview): stop opening PDFs in the text editor
gtsteffaniak/filebrowser #2856
Merged
fix(resources): return 400 when path or source is missing
immich-app/immich #31075
Merged
fix(ml): read CLIP model configs as UTF-8
immich-app/immich #30851
Merged
fix(server): kill pg_dump when a backup fails so it stops holding table locks
netalertx/NetAlertX #1761
Merged
fix(mikrotik): continue scans past leases without MAC addresses
henrygd/beszel #2267
Merged
fix(agent): report allocated swap as used
nicolargo/glances #3685
Merged
fix(percpu): report the guest nice CPU value
mealie-recipes/mealie #8170
Merged
fix: registration with seed data returns a 500
nicolargo/glances #3671
Merged
fix(plugins): init containers, vms and smart stats as a list
netalertx/NetAlertX #1756
Merged
feat(ntfy): allow more than one custom header
henrygd/beszel #2245
Merged
fix(agent): round load average to two decimals
AnalogJ/scrutiny #1062
Merged
fix(frontend): hide the host header when a host has no visible drives
taylorwilsdon/google_workspace_mcp #1028
Merged
fix(attachments): expire stored files by mtime so a restart stops orphaning them
netalertx/NetAlertX #1695
Merged
Add custom header and URL query string options to the ntfy publisher
AnalogJ/scrutiny #1018
Merged
fix(frontend): sort all columns on drive details page
Beingpax/VoiceInk #855
Merged
fix: Unicode-aware word boundaries in word replacements
immich-app/immich #29354
Merged
fix(server): dissolve stack when its non-primary assets are deleted
miniflux/v2 #4428
Merged
fix(css): add line-height to headings to prevent overlap when they wrap
filebrowser/filebrowser #6010
Merged
fix(preview): keep the EPUB table-of-contents button clear of the header
czlonkowski/n8n-mcp #794
Merged
fix(diff-engine): accept undefined as property-removal marker
punkpeye/awesome-mcp-servers #6605
Merged
Add justadityaraj/amazon-in-mcp to E-Commerce
taylorwilsdon/google_workspace_mcp #799
Merged
fix(gcalendar): include creator and organizer in get_events detailed output
umami-software/umami #3095
Merged
Update hi-IN.json
ActivityWatch/aw-watcher-web #135
Merged
docs(README): updated the broken Chrome extension link