Skip Navigation

Scott Spence

Infrastructure, MCP Tools, and Developer Ergonomics - October 2025

Hey! How’s it going? This is the October 2025 edition of my now monthly newsletter I’ll be doing this to share what I’ve been working on, learning and building.

So, as you’ll see from this, currently this newsletter is a summary of all my GitHub activity, just so I have something to reflect on personally, you can look at the commits on this repo to see what I’ve been up to! Essentially, I’m getting all my GitHub activity (commits, PRs, issues, releases) and feeding that into Claude to generate a monthly newsletter. It’s a bit meta, but it’s a start!

If it weren’t for AI this newsletter wouldn’t exist, so shout out to Claude for making this possible.

October was split between private client infrastructure work and building tools that scratch my own development itches. The month started with a SQLite corruption investigation that turned into a learning experience about database backups, then shifted to creating MCP tools/CLIs for Claude to use and refactoring Devhub.party to actually work!

The technical split was roughly 40% private infrastructure and monorepo work, 30% MCP tool development, and 30% CRM refactoring.

Private work dominated the commit count - building PDF generation systems via a CLI for Claude to use (Claude loves using tools!!), working with CSV pipelines (for the Claude CLI), and implementing database utilities for client projects along with infra work for improved CI/CD.

Highlights

Three threads ran through the month: database reliability, MCP tooling ecosystem, and component architecture.

SQLite Corruption and Database Backups

I noticed my site’s popular posts weren’t displaying and discovered I’d corrupted my SQLite database. Wrote up the full investigation in SQLite Corruption with fs.copyFile() in WAL Mode - the short version is that fs.copyFile() doesn’t respect WAL mode’s locking semantics. The fix involved implementing an SQLite backup API using the native .backup() method and setting up automated backups through cron jobs. This turned into a pattern I’ve since reused across projects.

MCP Tool Development

I built several MCP tools to improve Claude Code workflows. mcp-sqlite-tools adds SQLite handling with connection management and schema operations. mcp-omnisearch brings web search to Claude with support for multiple providers and search operators. claude-skills-cli (not an MCP!) gives Claude guardrails to follow when creating SKILL.md files. Each of these tools solves a specific friction point (for me!) when working with AI assistants.

Devhub CRM Architecture

I spent the latter half of October rebuilding Devhub CRM with Better Auth and Remote Functions. The authentication implementation was straightforward: email/password auth with session management using SvelteKit remote functions.

The GitHub integration for importing contacts is what I’m really happy about! There’s also a QR code generator for profile sharing.

Blog Posts

Two posts on scottspence.com and I’ve already discussed the SQLite corruption issue.

MCP Server Context Optimisation

I wrote about reducing MCP tool context usage in Optimising MCP Server Context Usage in Claude Code. This is when I started a Claude Code session and noticed it was consuming 66,000+ tokens before typing a word. The fix involved aggressive description pruning, removing redundant documentation, and consolidating tool definitions.

Component Testing Patterns

With the Vitest v4 release I updated sveltest.dev to use the new patterns.

With that then updated Devhub from @testing-library/svelte to vitest-browser-svelte.

Database and Schema Management

I implemented migration handling with schema initialisation for Devhub and scottspence.com. Rather than complex migration tools, I used simple SQL files executed on startup.

Open Source

Public work focused on documentation and tooling.

MCP Tools Ecosystem

I do a fair bit of tooling for MCP! Released updates to mcp-sqlite-tools (v0.0.15) optimising tool descriptions and fixing multi-statement SQL handling.

I updated mcp-omnisearch search operators after the context usage learnings.

Created mcpick (v0.0.4), a CLI for managing MCP server configurations as I was cheesed off with having to manually edit the .claude.json every time I wanted to swap out an MCP tool.

Built claude-skills-cli because Claude can’t help itself when you ask it to write a document it goes bananas!.

Vitest v4 Migration

Mentioned already! But updated sveltest for Vitest v4, changing imports from @vitest/browser/context to vitest/browser. Added migration guides explaining the breaking changes. Updated test examples and configuration files.

Phew!

That’s quite a lot! I have edited this from what Claude generated! what do you think? Too much? Too vague? Let me know!

Thanks for reading, catch you next month!

Copyright Ā© 2017 - 2025 - All rights reserved Scott Spence