<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: jmcodes</title><link>https://news.ycombinator.com/user?id=jmcodes</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 17 Apr 2026 00:41:46 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=jmcodes" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by jmcodes in "I still prefer MCP over skills"]]></title><description><![CDATA[
<p>I don't maintain this anymore but I experimented with this a while back: <a href="https://github.com/jx-codes/lootbox" rel="nofollow">https://github.com/jx-codes/lootbox</a><p>Essentially you give the agent a way to run code that calls MCP servers, then it can use them like any other API.<p>Nowadays small bash/bun scripts and an MCP gateway proxy gets me the same exact thing.<p>So yeah at some level you do have to build out your own custom functionality.</p>
]]></description><pubDate>Fri, 10 Apr 2026 12:27:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=47717076</link><dc:creator>jmcodes</dc:creator><comments>https://news.ycombinator.com/item?id=47717076</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47717076</guid></item><item><title><![CDATA[New comment by jmcodes in "Apideck CLI – An AI-agent interface with much lower context consumption than MCP"]]></title><description><![CDATA[
<p>It can and it does especially combined with skills (context files). It can hit REST APIs with CURL just fine. MCP is basically just another standard.<p>Where it comes in handy has mostly been in distribution honestly. There's something very "open apis web era" about MCP servers where because every company rushed to publish them, you can write a lot of creative integrations a bit more easily.</p>
]]></description><pubDate>Tue, 17 Mar 2026 01:59:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=47407676</link><dc:creator>jmcodes</dc:creator><comments>https://news.ycombinator.com/item?id=47407676</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47407676</guid></item><item><title><![CDATA[New comment by jmcodes in "Show HN: Reconstruct any image using primitive shapes, runs in-browser via WASM"]]></title><description><![CDATA[
<p>Not the guy who made it but I immediately wondered if I could use the intermediate steps with some "outline" mode to help me see things in shapes and finally learn to draw a bit.</p>
]]></description><pubDate>Fri, 06 Mar 2026 22:12:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=47281818</link><dc:creator>jmcodes</dc:creator><comments>https://news.ycombinator.com/item?id=47281818</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47281818</guid></item><item><title><![CDATA[New comment by jmcodes in "The Case That A.I. Is Thinking"]]></title><description><![CDATA[
<p>It's a process that I don't have conscious control over.<p>I don't choose to think random thoughts they appear.<p>Which is different than thoughts I consciously choose to think and engage with.<p>From my subjective perspective it is an input into my field of awareness.</p>
]]></description><pubDate>Mon, 03 Nov 2025 21:15:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=45804548</link><dc:creator>jmcodes</dc:creator><comments>https://news.ycombinator.com/item?id=45804548</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45804548</guid></item><item><title><![CDATA[New comment by jmcodes in "The Case That A.I. Is Thinking"]]></title><description><![CDATA[
<p>Our entire extistence and experience is nothing _but_ input.<p>Temperature changes, visual stimulus, auditory stimulus, body cues, random thoughts firing, etc.. Those are all going on all the time.</p>
]]></description><pubDate>Mon, 03 Nov 2025 21:01:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=45804381</link><dc:creator>jmcodes</dc:creator><comments>https://news.ycombinator.com/item?id=45804381</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45804381</guid></item><item><title><![CDATA[New comment by jmcodes in "It's insulting to read AI-generated blog posts"]]></title><description><![CDATA[
<p>I don't agree entirely with this. I know why the LLM wrote the code that way. Because I told it to and _I_ know why I want the code that way.<p>If people are letting the LLM decide how the code will be written then I think they're using them wrong and yes 100% they won't understand the code as well as if they had written it by hand.<p>LLMs are just good pattern matchers and can spit out text faster than humans, so that's what I use them for mostly.<p>Anything that requires actual brainpower and thinking is still my domain. I just type a lot less than I used to.</p>
]]></description><pubDate>Mon, 27 Oct 2025 21:21:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=45726448</link><dc:creator>jmcodes</dc:creator><comments>https://news.ycombinator.com/item?id=45726448</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45726448</guid></item><item><title><![CDATA[Show HN: Lootbox – CLI that unifies MCP and custom functions for Claude Code]]></title><description><![CDATA[
<p>Hey HN! I built a CLI that unifies MCP tools and your custom functions under one code execution interface. Think serverless functions for your coding assistant but on your local machine<p>Installation is a one-liner curl script (see README)<p>Instead of configuring your AI with dozens of individual tools, drop a ts file in a directory, and give the LLM one capability: execute TypeScript with lootbox.<p><pre><code>  // my-functions/example.ts
  export async function analyzeText(args: { text: string }) {
    return {
      length: args.text.length,
      words: args.text.split(' ').length,
      uppercase: args.text.toUpperCase()
    };
  }

  # Run server with your functions + MCP servers
  lootbox-runtime --rpc-dir ./my-functions --mcp-config mcp.json

  # AI writes code that uses both:
  lootbox -e '
    const file = await tools.mcp_github.read_file({repo: "x/y", path: "README.md"});
    const analysis = await tools.myapp.analyzeText({text: file});
    console.log(analysis);
  '
</code></pre>
Your custom TypeScript functions auto-discover alongside your MCP servers and get turned into a fully typed 'tools' object that the AI can use.<p>AI gets full type definitions for everything. Writes code that chains operations together instead of doing sequential tool calls.<p>LLM scripts are executed in a Deno Sandbox with only net access. RPC files get full access.<p>Based on Cloudflare's Code Mode research but completely local.<p>Check the README for some sample rpc files, a workflow, and a much deeper dive on how it all works.<p>Typically Claude Code will use<p><pre><code>  lootbox --help
  lootbox --namespaces
  lootbox --types kv,sqlite // returns the types from the typed client
</code></pre>
And will then start writing a script to orchestrate the tools to accomplish the goal.<p>Lootbox can also run files so you can tell Claude to save the script as a file and later just run it with<p><pre><code>  lootbox path/to/script.ts
</code></pre>
Built it after continuing to experiment and play with my original take on Code Mode.<p><a href="https://github.com/jx-codes/lootbox" rel="nofollow">https://github.com/jx-codes/lootbox</a><p>Original Take:
<a href="https://github.com/jx-codes/codemode-mcp" rel="nofollow">https://github.com/jx-codes/codemode-mcp</a></p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45467807">https://news.ycombinator.com/item?id=45467807</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 03 Oct 2025 21:09:23 +0000</pubDate><link>https://github.com/jx-codes/lootbox</link><dc:creator>jmcodes</dc:creator><comments>https://news.ycombinator.com/item?id=45467807</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45467807</guid></item><item><title><![CDATA[New comment by jmcodes in "Ask HN: How do you say “I don’t know, but I’ll get back to you” confidently?"]]></title><description><![CDATA[
<p>"It sounds like it could be xyz, but let me double check and I'll let you know in a few/hour/day/"<p>OR<p>"No clue. Let me do some digging first."<p>Have literally never had this come up in my ten years working in tech. Big picture advice? Don't overthink small things like this.<p>You'll just make yourself feel and act more unconfident not less.</p>
]]></description><pubDate>Thu, 02 Oct 2025 14:33:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=45450157</link><dc:creator>jmcodes</dc:creator><comments>https://news.ycombinator.com/item?id=45450157</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45450157</guid></item><item><title><![CDATA[New comment by jmcodes in "Show HN: I built an MCP server using Cloudflare's code mode pattern"]]></title><description><![CDATA[
<p>Like the the other commenter said, just for the permissions.<p>If Bun had a sandbox I'd use it.<p>Deno isn't my cup of tea (although I appreciate it more after building with it the past two days). My impression is that it is lightweight, you can deploy it easily to edge workers and it's built on rust so you can actually use it to build your own runtime with only the parts you want. (I was working on this for a game when I ran into the CF blog article).<p>Node/npm is the grandpa, can't go wrong but it doesn't run typescript by default and you'll lose cool points.<p>pnpm is cool don't really know what makes it different these days except it has a nice cache by default so you get faster installs, and you can do monorepos semi-easily. It's my default if I can't use Bun.<p>Bun is newer and my current favorite. You can compile to single executable, have access to most of the npm ecosystem (some packages still have minor issues), you have a built in sqlite db so it's great for prototyping, and some other niceties.<p>There's a lot more to it but that's the important differences I run into in my day to day.</p>
]]></description><pubDate>Tue, 30 Sep 2025 01:23:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=45420952</link><dc:creator>jmcodes</dc:creator><comments>https://news.ycombinator.com/item?id=45420952</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45420952</guid></item><item><title><![CDATA[New comment by jmcodes in "Show HN: I built an MCP server using Cloudflare's code mode pattern"]]></title><description><![CDATA[
<p>Yes I'm actually not too fond of the DX of Deno. I don't know why. It's a perfectly fine runtime and the permissions are obviously great but the texture is off if that makes sense.<p>I always gravitate to Bun when I can, it feels light and fresh.<p>Also I'm definitely going to try out your project this weekend, I've been looking for something like this to put together a free college info aggregation site from the college's public sites themselves, like financial aid dates, on campus programs, etc..</p>
]]></description><pubDate>Tue, 30 Sep 2025 01:15:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=45420897</link><dc:creator>jmcodes</dc:creator><comments>https://news.ycombinator.com/item?id=45420897</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45420897</guid></item><item><title><![CDATA[New comment by jmcodes in "Show HN: I built an MCP server using Cloudflare's code mode pattern"]]></title><description><![CDATA[
<p>Haha yes, yes it is. I wrote out and implemented that approach in the links below. I've been playing with it for a few hours and I have to say I actually really really like it.<p>One thing I ran into is that since the RPC calls are independent Deno processes, you can't keep say DuckDB or SQLite open.<p>But since it's just typescript on Deno. I can just use a regular server process instead of MCP, expose it through the TS RPC files I define, and the LLM will have access to it.<p><a href="https://github.com/jx-codes/mcp-rpc" rel="nofollow">https://github.com/jx-codes/mcp-rpc</a>
<a href="https://news.ycombinator.com/item?id=45420133">https://news.ycombinator.com/item?id=45420133</a></p>
]]></description><pubDate>Tue, 30 Sep 2025 01:01:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=45420794</link><dc:creator>jmcodes</dc:creator><comments>https://news.ycombinator.com/item?id=45420794</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45420794</guid></item><item><title><![CDATA[New comment by jmcodes in "Show HN: I built an MCP server using Cloudflare's code mode pattern"]]></title><description><![CDATA[
<p><a href="https://github.com/jx-codes/mcp-rpc" rel="nofollow">https://github.com/jx-codes/mcp-rpc</a><p>For those of you interested, I wrote out and built an more RPC typescript centric approach to avoid using other MCP servers at all. Would appreciate some thoughts!<p><a href="https://news.ycombinator.com/item?id=45420133">https://news.ycombinator.com/item?id=45420133</a></p>
]]></description><pubDate>Tue, 30 Sep 2025 00:57:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=45420770</link><dc:creator>jmcodes</dc:creator><comments>https://news.ycombinator.com/item?id=45420770</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45420770</guid></item><item><title><![CDATA[New comment by jmcodes in "Show HN: I built an MCP server using Cloudflare's code mode pattern"]]></title><description><![CDATA[
<p>Oh this sounds so awesome. The memory system sounds very cool. I could imagine decaying memories in the graph, their initial salience being N then as it gets referenced more and more N goes up (more edges?), keep a decay function over time?<p>Sounds very cool.<p>I actually didn't end up implementing the memory. Instead I went down the 'get rid of the MCP' route. <a href="https://github.com/jx-codes/mcp-rpc" rel="nofollow">https://github.com/jx-codes/mcp-rpc</a><p>Basically instead of mcp servers you write typescript files that are parsed to generate a typed client, these are executed in one deno sandbox, and the LLM code gets that typed client and its scripts are run in a sandbox with only net allowed.<p>Been having some fun testing it out today.<p>If you have time to take a look I would be curious to hear what you think.<p><a href="https://github.com/jx-codes/mcp-rpc" rel="nofollow">https://github.com/jx-codes/mcp-rpc</a></p>
]]></description><pubDate>Mon, 29 Sep 2025 23:34:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=45420185</link><dc:creator>jmcodes</dc:creator><comments>https://news.ycombinator.com/item?id=45420185</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45420185</guid></item><item><title><![CDATA[Show HN: Give LLMs TypeScript tools without writing MCP servers]]></title><description><![CDATA[
<p>I built this after reading Cloudflare's "Code Mode" article and building my own local version (link below).<p>Instead of making MCP tool calls, LLMs write TypeScript against auto-generated RPC clients.
  // Follow the readme instructions and run the RPC server<p><pre><code>  mcp-rpc-runtime -r ./test-rpc -p 8080
</code></pre>
Drop .ts files with typed exports:
  // ./test-rpc/users.ts
  export async function getUser(args: { id: number }): Promise<User> { ... }<p>The system generates a typed client. LLMs write normal TypeScript:
  const [user, orders] = await Promise.all([
    rpc.users.getUser({ id: 123 }),
    rpc.orders.getHistory({ userId: 123 })
  ]);<p>No MCP servers needed. The RPC runtime has full system access, while LLM scripts run sandboxed with only network permissions.<p>Original Local Code Mode: <a href="https://github.com/jx-codes/codemode-mcp" rel="nofollow">https://github.com/jx-codes/codemode-mcp</a>
Runtime: <a href="https://github.com/jx-codes/mcp-rpc-runtime" rel="nofollow">https://github.com/jx-codes/mcp-rpc-runtime</a>
MCP Bridge: <a href="https://github.com/jx-codes/mcp-rpc-bridge" rel="nofollow">https://github.com/jx-codes/mcp-rpc-bridge</a>
Details: <a href="https://jmcodes.tech/blog/mcp-rpc/" rel="nofollow">https://jmcodes.tech/blog/mcp-rpc/</a></p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45420133">https://news.ycombinator.com/item?id=45420133</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 29 Sep 2025 23:26:36 +0000</pubDate><link>https://github.com/jx-codes/mcp-rpc</link><dc:creator>jmcodes</dc:creator><comments>https://news.ycombinator.com/item?id=45420133</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45420133</guid></item><item><title><![CDATA[New comment by jmcodes in "Show HN: I built an MCP server using Cloudflare's code mode pattern"]]></title><description><![CDATA[
<p>Says something about my coding haha.<p>Yeah since it's using Deno it'd be cool just use Deno throughout. Definitely gotta clean up the code quite a bit.</p>
]]></description><pubDate>Sun, 28 Sep 2025 19:33:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=45407201</link><dc:creator>jmcodes</dc:creator><comments>https://news.ycombinator.com/item?id=45407201</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45407201</guid></item><item><title><![CDATA[New comment by jmcodes in "Show HN: I built an MCP server using Cloudflare's code mode pattern"]]></title><description><![CDATA[
<p>So this is a first pass to capture the workflow part (mix code and MCP calls).<p>The fetch code isn't any better than the tool code I agree, but typescript code is more common so I'd guess this would be too?<p>But anyway I think the real power comes with the type-safety part that I left out this morning (working on it now). From what I understand Cloudflare is essentially generating an SDK for the LLM to write code against.<p>Instead of writing that fetch call. The LLM would generate<p>```
const redditResults = await redditMCP_getTopPosts(subreddit);
const insertMutation = await duckdb_Insert("SQL STUFF", redditResults.map(...));
const results = await duckDb_Query(args: duckDb_QueryArgs);
return resultsInSomeNiceFormat;
```<p>Where the method names come from the MCP server tools, and the argument types are autogenerated from the MCP schemas themselves.<p>No idea if this is a valuable workflow or not personally. I just thought it was cool and wanted to tinker with it.</p>
]]></description><pubDate>Sun, 28 Sep 2025 19:23:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=45407092</link><dc:creator>jmcodes</dc:creator><comments>https://news.ycombinator.com/item?id=45407092</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45407092</guid></item><item><title><![CDATA[New comment by jmcodes in "Show HN: I built an MCP server using Cloudflare's code mode pattern"]]></title><description><![CDATA[
<p>Yeah the main value is definitely the code execution layer. You could easily generate a type-safe client from your REST, GraphQL, TRPC layer, expose it to the Deno layer and list the types as a resource or something. No need to involve MCP at all. You're basically just defining a stdlib for the LLM.<p>If you run `deno check` before executing the code you'd get the type-safety loop (working on this now)<p>Later I want to see what'd happen if you give the LLM a repo of sorts to store useful snippets and functions with comments for later use. So the LLM itself would save workflows, be able to import them into the Deno environment and chain those together.<p>It definitely needs a prompt that tells it to use the MCP server but I can see it being pretty powerful.<p>I only did simple tests like get Reddit posts, their comments, find the weather on those days, stick them in duckdb, and run some social media metric queries.<p>I could see that same test being: "find me leads, filter by keywords, run against some parquet file stored somewhere using duckdb, craft an email for my boss."<p>I'm kind of ranting but I think this a pretty exciting approach.<p>Edit: GraphQL style codegen layer but for all your APIs seems like a pretty obvious middle layer for this, maybe next weekend.</p>
]]></description><pubDate>Sun, 28 Sep 2025 18:37:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=45406728</link><dc:creator>jmcodes</dc:creator><comments>https://news.ycombinator.com/item?id=45406728</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45406728</guid></item><item><title><![CDATA[Show HN: I built an MCP server using Cloudflare's code mode pattern]]></title><description><![CDATA[
<p>Read this article by Cloudflare this morning <a href="https://blog.cloudflare.com/code-mode/" rel="nofollow">https://blog.cloudflare.com/code-mode/</a> the main argument being that LLMs are much better at writing typescript code than tool calls because they've seen typescript code many more times.<p>HN Discussion: <a href="https://news.ycombinator.com/item?id=45399204">https://news.ycombinator.com/item?id=45399204</a>
<a href="https://news.ycombinator.com/item?id=45386248">https://news.ycombinator.com/item?id=45386248</a><p>Deno provides a great sandbox environment for Typescript code execution because of its permissions system which made it easy to spin up code that only has access to fetch and network calls.<p>Stick an MCP proxy on top of that and you've got "CodeMode" (code intermixed with MCP tool calls) for more advanced workflow orchestration.<p><a href="https://github.com/jx-codes/codemode-mcp" rel="nofollow">https://github.com/jx-codes/codemode-mcp</a><p>There's a lot of things that can be improved here. Like a virtual file system for the agent to actually build up its solution instead of being forced to one shot the solution but the bones are there.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45405584">https://news.ycombinator.com/item?id=45405584</a></p>
<p>Points: 87</p>
<p># Comments: 29</p>
]]></description><pubDate>Sun, 28 Sep 2025 16:23:51 +0000</pubDate><link>https://github.com/jx-codes/codemode-mcp</link><dc:creator>jmcodes</dc:creator><comments>https://news.ycombinator.com/item?id=45405584</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45405584</guid></item><item><title><![CDATA[New comment by jmcodes in "If you are good at code review, you will be good at using AI agents"]]></title><description><![CDATA[
<p>Agreed 100% and I enjoy that part too, I just don't really see how that is being taken away.<p>The way I see it these tools allow me to use my actual brainpower mostly on those problems. Because all the rote work can now be workably augmented away, I can choose which problems to actually focus on "by hand" as it were. I'd never give those problems to an LLM to solve. I might however ask it to search the web for papers or articles or what have you that have solved similar problems and go from there.<p>If someone is giving that up then I'd question why they're doing that.. No one is forcing them to.<p>It's the problem solving itself that is fun, the "layer" that it's in doesn't really make a difference to me.</p>
]]></description><pubDate>Mon, 22 Sep 2025 14:52:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=45334302</link><dc:creator>jmcodes</dc:creator><comments>https://news.ycombinator.com/item?id=45334302</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45334302</guid></item><item><title><![CDATA[New comment by jmcodes in "If you are good at code review, you will be good at using AI agents"]]></title><description><![CDATA[
<p>Been doing it for ten years still love the profession as much if not more than when I started, but the joy of software development for me was always in seeing my idea come to life, in exploring all the clever ways people had solved so many problems, in trying to become as good at the craft as they were, and in sharing those solutions and ideas with like-minded peers.<p>I care deeply about the code quality that goes into the projects I work on because I end up having to maintain it, review it, or fix it when it goes south, and honestly it just feels wrong to me to see bad code.<p>But literally typing out the characters that make up the code? I could care less. I've done that already. I can do it in my sleep, there's no challenge.<p>At this stage in my career I'm looking for ways to take the experience I have and upskill my teams using it.<p>I'd be crazy not to try and leverage LLMs as much as possible. That includes spending the time to write good CLAUDE.md files, set up custom agents that work with our codebase and patterns, it also includes taking the time to explain the why behind those choices to the team so they understand them, calling out bad PRs that "work" but are AI slop and teaching them how to get better results out of these things.<p>Idk man the profession is pretty big and creating software is still just as fun as when I was doing it character by character in notepad. I just don't care to type more than I need to when I can focus on problem solving and building.</p>
]]></description><pubDate>Sun, 21 Sep 2025 02:15:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=45319421</link><dc:creator>jmcodes</dc:creator><comments>https://news.ycombinator.com/item?id=45319421</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45319421</guid></item></channel></rss>