<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Immanuel Gabriel</title>
    <description>The latest articles on Forem by Immanuel Gabriel (@immanuel_gabriel_341393bf).</description>
    <link>https://forem.com/immanuel_gabriel_341393bf</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3925833%2F70ffd687-29d3-4439-9c7f-20750f1b958f.png</url>
      <title>Forem: Immanuel Gabriel</title>
      <link>https://forem.com/immanuel_gabriel_341393bf</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/immanuel_gabriel_341393bf"/>
    <language>en</language>
    <item>
      <title>Making Ops Pulse less project-specific and more useful for Cloudflare builders</title>
      <dc:creator>Immanuel Gabriel</dc:creator>
      <pubDate>Tue, 19 May 2026 16:04:16 +0000</pubDate>
      <link>https://forem.com/immanuel_gabriel_341393bf/making-ops-pulse-less-project-specific-and-more-useful-for-cloudflare-builders-4nkl</link>
      <guid>https://forem.com/immanuel_gabriel_341393bf/making-ops-pulse-less-project-specific-and-more-useful-for-cloudflare-builders-4nkl</guid>
      <description>&lt;p&gt;I built Ops Pulse because I needed a calmer way to diagnose my Cloudflare setup.&lt;/p&gt;

&lt;p&gt;When you are running Workers, D1, cron schedules, and logs across a few small services, the hard part is not always “getting metrics.”&lt;/p&gt;

&lt;p&gt;The hard part is knowing what the metrics mean.&lt;/p&gt;

&lt;p&gt;A Worker can look scary because an old error is still inside a long report window.&lt;/p&gt;

&lt;p&gt;A cron job can look broken when it simply was not expected to run yet.&lt;/p&gt;

&lt;p&gt;A service can be idle without being unhealthy.&lt;/p&gt;

&lt;p&gt;A feed can be healthy but quiet.&lt;/p&gt;

&lt;p&gt;And sometimes the thing you are about to edit is not the thing that is actually failing.&lt;/p&gt;

&lt;p&gt;That is the loop Ops Pulse is meant to reduce.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cloudflare metrics in.
Plain-English diagnosis out.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What Ops Pulse does
&lt;/h2&gt;

&lt;p&gt;Ops Pulse is a local-first CLI for diagnosing Cloudflare Workers, D1, cron schedules, and Workers Observability logs.&lt;/p&gt;

&lt;p&gt;It runs on your machine, uses your own Cloudflare token, and produces readable reports about what looks healthy, degraded, idle, noisy, or unknown.&lt;/p&gt;

&lt;p&gt;You can run it with npx:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx freshcontext-ops-pulse &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or install it globally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; freshcontext-ops-pulse
freshops &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The tool is designed for people who want a quick operational read before they start changing code.&lt;/p&gt;

&lt;p&gt;It can help inspect things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Worker request counts&lt;/li&gt;
&lt;li&gt;error rates&lt;/li&gt;
&lt;li&gt;invocation status&lt;/li&gt;
&lt;li&gt;runtime exceptions&lt;/li&gt;
&lt;li&gt;client disconnects&lt;/li&gt;
&lt;li&gt;CPU and wall time&lt;/li&gt;
&lt;li&gt;subrequests&lt;/li&gt;
&lt;li&gt;D1 reads and writes&lt;/li&gt;
&lt;li&gt;D1 latency&lt;/li&gt;
&lt;li&gt;cron behavior&lt;/li&gt;
&lt;li&gt;Workers Observability events&lt;/li&gt;
&lt;li&gt;recent logs for a specific Worker&lt;/li&gt;
&lt;li&gt;plain-English recommendations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;freshcontext-ops-pulse report &lt;span class="nt"&gt;--hours&lt;/span&gt; 1
freshcontext-ops-pulse report &lt;span class="nt"&gt;--hours&lt;/span&gt; 6
freshcontext-ops-pulse logs &lt;span class="nt"&gt;--worker&lt;/span&gt; my-worker &lt;span class="nt"&gt;--hours&lt;/span&gt; 1
freshcontext-ops-pulse errors &lt;span class="nt"&gt;--worker&lt;/span&gt; my-worker &lt;span class="nt"&gt;--hours&lt;/span&gt; 24
freshcontext-ops-pulse assays
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The goal is not to replace Cloudflare Observability.&lt;/p&gt;

&lt;p&gt;The goal is to sit one layer above the raw signals and help answer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;What is actually broken?
What is healthy?
What is idle?
What is old noise?
What should I inspect first?
What should I avoid touching?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That last question matters a lot.&lt;/p&gt;

&lt;p&gt;A surprising amount of debugging time is wasted changing healthy systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Local-first setup
&lt;/h2&gt;

&lt;p&gt;Ops Pulse does not require a hosted dashboard.&lt;/p&gt;

&lt;p&gt;It does not require an account with FreshContext.&lt;/p&gt;

&lt;p&gt;It does not send your Cloudflare metrics to my server.&lt;/p&gt;

&lt;p&gt;It reads from Cloudflare using the credentials you provide locally.&lt;/p&gt;

&lt;p&gt;Required environment variables:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CLOUDFLARE_ACCOUNT_ID=
CLOUDFLARE_API_TOKEN=
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The token should be read-only where possible.&lt;/p&gt;

&lt;p&gt;The current docs explain recommended Cloudflare token permissions, but the basic principle is simple: only give Ops Pulse access to the Cloudflare resources you want it to inspect.&lt;/p&gt;

&lt;p&gt;For example, if you only want it to inspect Worker analytics and logs, scope the token around that.&lt;/p&gt;

&lt;p&gt;If you want it to inspect D1-related signals, include the relevant D1 read permissions.&lt;/p&gt;

&lt;p&gt;Do not commit your &lt;code&gt;.env&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Do not paste your token into issues, chats, or support threads.&lt;/p&gt;

&lt;p&gt;That privacy boundary is now documented more clearly in &lt;code&gt;PRIVACY.md&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Diagnostic assays
&lt;/h2&gt;

&lt;p&gt;I also cleaned up the diagnostic assay documentation.&lt;/p&gt;

&lt;p&gt;An assay is just a focused check that asks one operational question.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Do public/runtime versions agree?
Do MCP clients see the expected tools?
Is cache behavior visible enough to trust?
Was cron expected in this time window?
Is the Worker actually throwing runtime errors?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each assay should return a simple shape:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;status&lt;/li&gt;
&lt;li&gt;reason&lt;/li&gt;
&lt;li&gt;evidence&lt;/li&gt;
&lt;li&gt;recommendation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The statuses are intentionally boring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;healthy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;warning&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;degraded&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;unknown&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;code&gt;unknown&lt;/code&gt; state is important.&lt;/p&gt;

&lt;p&gt;A diagnosis tool should not fake certainty.&lt;/p&gt;

&lt;p&gt;If Ops Pulse cannot see enough evidence, it should say that clearly instead of pretending everything is fine.&lt;/p&gt;

&lt;p&gt;For example, a cache correctness check should not claim the cache is healthy if cache metadata is not visible in logs. It should explain what is missing and what visibility would be needed to make the call.&lt;/p&gt;

&lt;p&gt;That is the kind of behavior I want from the tool generally.&lt;/p&gt;

&lt;p&gt;Not dramatic.&lt;/p&gt;

&lt;p&gt;Not magical.&lt;/p&gt;

&lt;p&gt;Just honest.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed in this patch
&lt;/h2&gt;

&lt;p&gt;This was a documentation and onboarding patch, not a feature rewrite.&lt;/p&gt;

&lt;p&gt;The latest cleanup added or improved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a clearer README&lt;/li&gt;
&lt;li&gt;generic setup for non-FreshContext users&lt;/li&gt;
&lt;li&gt;better quickstart examples&lt;/li&gt;
&lt;li&gt;environment variable guidance&lt;/li&gt;
&lt;li&gt;recommended token-permission notes&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PRIVACY.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docs/ASSAYS.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;safer &lt;code&gt;.env.example&lt;/code&gt; comments&lt;/li&gt;
&lt;li&gt;clearer CLI help text&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The README now frames Ops Pulse as a local Cloudflare diagnosis CLI first.&lt;/p&gt;

&lt;p&gt;My own systems are just the first place I used it seriously.&lt;/p&gt;

&lt;p&gt;That matters because the tool should be useful to someone running their own Worker, API, cron job, D1-backed app, feed service, or MCP server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who this is for
&lt;/h2&gt;

&lt;p&gt;Ops Pulse is probably useful if you are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;running Cloudflare Workers&lt;/li&gt;
&lt;li&gt;using D1&lt;/li&gt;
&lt;li&gt;relying on cron schedules&lt;/li&gt;
&lt;li&gt;checking Workers Observability logs&lt;/li&gt;
&lt;li&gt;maintaining a small API or feed&lt;/li&gt;
&lt;li&gt;building an MCP server on Cloudflare&lt;/li&gt;
&lt;li&gt;debugging alone without a full observability stack&lt;/li&gt;
&lt;li&gt;trying to tell fresh failures from stale noise&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is especially useful when you want a quick answer before touching code.&lt;/p&gt;

&lt;p&gt;Sometimes the right answer is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Do not edit this Worker.
The errors are old.
Cron was not expected in this window.
This other service is the one to inspect.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That kind of answer can save more time than another graph.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is not
&lt;/h2&gt;

&lt;p&gt;Ops Pulse is not auto-remediation.&lt;/p&gt;

&lt;p&gt;It does not patch your Workers.&lt;/p&gt;

&lt;p&gt;It does not deploy anything.&lt;/p&gt;

&lt;p&gt;It does not mutate Cloudflare resources.&lt;/p&gt;

&lt;p&gt;It does not replace Cloudflare’s own dashboards.&lt;/p&gt;

&lt;p&gt;It is also not trying to be a full observability platform.&lt;/p&gt;

&lt;p&gt;The current version is intentionally small:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;local CLI
read-only diagnosis
plain-English reports
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is enough for now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current status
&lt;/h2&gt;

&lt;p&gt;Ops Pulse is live on npm.&lt;/p&gt;

&lt;p&gt;It has crossed a small first signal of interest, with a little over 100 npm downloads at the time I checked.&lt;/p&gt;

&lt;p&gt;That is not product-market fit.&lt;/p&gt;

&lt;p&gt;But it is enough of a signal to keep polishing the setup, docs, and diagnosis flow.&lt;/p&gt;

&lt;p&gt;npm:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/freshcontext-ops-pulse" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/freshcontext-ops-pulse&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/PrinceGabriel-lgtm/freshcontext-ops-pulse" rel="noopener noreferrer"&gt;https://github.com/PrinceGabriel-lgtm/freshcontext-ops-pulse&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Try it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx freshcontext-ops-pulse &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; freshcontext-ops-pulse
freshops &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Next
&lt;/h2&gt;

&lt;p&gt;The next useful work is probably still small:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;better markdown/json output&lt;/li&gt;
&lt;li&gt;clearer resource selection&lt;/li&gt;
&lt;li&gt;more diagnostic assays&lt;/li&gt;
&lt;li&gt;more sample reports&lt;/li&gt;
&lt;li&gt;a simple setup check&lt;/li&gt;
&lt;li&gt;stronger examples for non-FreshContext projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I am trying to keep the direction simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cloudflare metrics in.
Plain-English diagnosis out.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If Ops Pulse helps one other builder avoid chasing stale noise or editing the wrong service, that is already useful.&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>opensource</category>
      <category>devtool</category>
      <category>ops</category>
    </item>
    <item>
      <title>The part after shipping an MCP server: making it fail honestly</title>
      <dc:creator>Immanuel Gabriel</dc:creator>
      <pubDate>Wed, 13 May 2026 11:25:06 +0000</pubDate>
      <link>https://forem.com/immanuel_gabriel_341393bf/the-part-after-shipping-an-mcp-server-making-it-fail-honestly-26fl</link>
      <guid>https://forem.com/immanuel_gabriel_341393bf/the-part-after-shipping-an-mcp-server-making-it-fail-honestly-26fl</guid>
      <description>&lt;p&gt;I thought the hard part was shipping the MCP server.&lt;/p&gt;

&lt;p&gt;It was not.&lt;/p&gt;

&lt;p&gt;The hard part started after the server was public, listed, installable, and testable outside my own machine.&lt;/p&gt;

&lt;p&gt;FreshContext is my MCP project around freshness-aware retrieval. The basic idea is simple: agents should not treat stale information as current truth. Every retrieved signal gets wrapped with source, timestamp, retrieval time, and confidence metadata, then ranked with freshness decay before it reaches the model.&lt;/p&gt;

&lt;p&gt;That was the first public story.&lt;/p&gt;

&lt;p&gt;But once the site, npm package, MCP Registry entry, Agentic Market listing, and feed APIs were live, a different kind of work became more important:&lt;/p&gt;

&lt;p&gt;Making the system fail honestly.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bug that bothered me most
&lt;/h2&gt;

&lt;p&gt;A read-only QA pass found several issues.&lt;/p&gt;

&lt;p&gt;Some were normal integration problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one finance path was failing against Yahoo with a 401&lt;/li&gt;
&lt;li&gt;the Hacker News tool rejected plain text even though the product copy implied search-like behavior&lt;/li&gt;
&lt;li&gt;one HN scrape path produced a malformed timestamp&lt;/li&gt;
&lt;li&gt;the local stdio package reported an old internal version&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Annoying, but fixable.&lt;/p&gt;

&lt;p&gt;The serious issue was different.&lt;/p&gt;

&lt;p&gt;A failed finance call could still be wrapped as high-confidence output.&lt;/p&gt;

&lt;p&gt;That is poisonous for a product about freshness and retrieval trust.&lt;/p&gt;

&lt;p&gt;If a tool fails, it should not come back dressed as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Confidence: high
Score: 100/100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is worse than an obvious crash. A crash tells you something broke. A confident bad envelope quietly teaches the user to distrust the whole system.&lt;/p&gt;

&lt;p&gt;So the next release was not about adding features.&lt;/p&gt;

&lt;p&gt;It was about making failures honest.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 0.3.17 release
&lt;/h2&gt;

&lt;p&gt;The 0.3.17 patch focused only on validated problems.&lt;/p&gt;

&lt;p&gt;No new verticals. No redesign. No “while we are here” expansion.&lt;/p&gt;

&lt;p&gt;The finance adapter moved away from the broken Yahoo path and now uses Stooq as a no-key quote source.&lt;/p&gt;

&lt;p&gt;Failure-looking adapter output is blocked from becoming high-confidence FreshContext output.&lt;/p&gt;

&lt;p&gt;The Hacker News tool now accepts both URLs and plain text queries while keeping the same field name for compatibility.&lt;/p&gt;

&lt;p&gt;HN dates are normalized before freshness scoring.&lt;/p&gt;

&lt;p&gt;The Worker version, npm package, stdio server info, and MCP Registry metadata were aligned to 0.3.17.&lt;/p&gt;

&lt;p&gt;I also added a small stdio smoke test so the package can prove the basics before release:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;initialize works&lt;/li&gt;
&lt;li&gt;server version matches package version&lt;/li&gt;
&lt;li&gt;tools/list returns 21 tools&lt;/li&gt;
&lt;li&gt;key tools exist&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this is glamorous.&lt;/p&gt;

&lt;p&gt;It is the maintenance layer that makes the public product feel less fragile.&lt;/p&gt;

&lt;h2&gt;
  
  
  The release gate became boring on purpose
&lt;/h2&gt;

&lt;p&gt;The release flow became:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;build locally
smoke stdio
check Worker TypeScript
deploy Worker
smoke live MCP endpoint
verify npm registry install
update public metadata
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That order matters.&lt;/p&gt;

&lt;p&gt;I did not want to publish npm and then discover that the deployed Worker path behaved differently. I also did not want the registry, npm package, and website telling three different stories.&lt;/p&gt;

&lt;p&gt;The rule became:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Do not publish or update public surfaces until the live path works.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is obvious in hindsight.&lt;/p&gt;

&lt;p&gt;It is also exactly the kind of obvious thing that gets skipped when you are moving fast.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built Ops Pulse
&lt;/h2&gt;

&lt;p&gt;Around the same time, I built a small tool called FreshContext Ops Pulse.&lt;/p&gt;

&lt;p&gt;It is not a dashboard. It is not a giant observability product. It is a local-first TypeScript CLI that reads Cloudflare metrics and turns them into plain-English diagnosis.&lt;/p&gt;

&lt;p&gt;FreshContext runs across Cloudflare Workers, D1, cron, and a few small feed services.&lt;/p&gt;

&lt;p&gt;That creates a practical debugging problem.&lt;/p&gt;

&lt;p&gt;If the Fresh HN Feed is healthy, I should not touch it while debugging the MCP worker.&lt;/p&gt;

&lt;p&gt;If the Jobs Feed is idle because no cron was expected in that window, that is not an outage.&lt;/p&gt;

&lt;p&gt;If the MCP core has runtime exceptions, I need to focus there instead of randomly changing healthy systems.&lt;/p&gt;

&lt;p&gt;Ops Pulse gives me that separation.&lt;/p&gt;

&lt;p&gt;The pipeline is simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cloudflare metrics -&amp;gt; normalized snapshot -&amp;gt; diagnosis -&amp;gt; recommendation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That helped shift the project from “poke around until something changes” to “debug from evidence.”&lt;/p&gt;

&lt;p&gt;That is a major relief when you are solo-building and every fix can accidentally create two more bugs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real lesson
&lt;/h2&gt;

&lt;p&gt;The biggest lesson was not about MCP specifically.&lt;/p&gt;

&lt;p&gt;It was about consistency.&lt;/p&gt;

&lt;p&gt;If the website says 21 tools, the registry should say 21 tools.&lt;/p&gt;

&lt;p&gt;If npm says 0.3.17, the Worker should report 0.3.17.&lt;/p&gt;

&lt;p&gt;If a source has a timestamp, normalize it before scoring.&lt;/p&gt;

&lt;p&gt;If a tool fails, make the failure visible.&lt;/p&gt;

&lt;p&gt;If one service is healthy, do not disturb it while fixing another service.&lt;/p&gt;

&lt;p&gt;This sounds boring because it is boring.&lt;/p&gt;

&lt;p&gt;But boring is what makes a tool usable.&lt;/p&gt;

&lt;p&gt;A lot of early product work feels like building features. Then the product becomes public and the work changes. Suddenly the important thing is not “can I add one more thing?”&lt;/p&gt;

&lt;p&gt;It is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Can I trust the thing that already shipped?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For FreshContext, that meant stopping feature work for a moment and stabilizing the public surface:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MCP Worker live&lt;/li&gt;
&lt;li&gt;npm package verified&lt;/li&gt;
&lt;li&gt;MCP Registry updated&lt;/li&gt;
&lt;li&gt;Agentic Market listing accepted&lt;/li&gt;
&lt;li&gt;Fresh HN Feed live&lt;/li&gt;
&lt;li&gt;Fresh Jobs Feed live&lt;/li&gt;
&lt;li&gt;Apify actors published&lt;/li&gt;
&lt;li&gt;Ops Pulse available for operational diagnosis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is still plenty to improve.&lt;/p&gt;

&lt;p&gt;But the project is now past the “just an idea” phase. It has install paths, public listings, live feeds, and a small ops loop watching the system.&lt;/p&gt;

&lt;p&gt;That feels like a better foundation than another rushed feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;p&gt;FreshContext hub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://freshcontext-site.pages.dev/" rel="noopener noreferrer"&gt;https://freshcontext-site.pages.dev/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Live demo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://freshcontext-mcp.gimmanuel73.workers.dev/demo" rel="noopener noreferrer"&gt;https://freshcontext-mcp.gimmanuel73.workers.dev/demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;MCP endpoint:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://freshcontext-mcp.gimmanuel73.workers.dev/mcp" rel="noopener noreferrer"&gt;https://freshcontext-mcp.gimmanuel73.workers.dev/mcp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/PrinceGabriel-lgtm/freshcontext-mcp" rel="noopener noreferrer"&gt;https://github.com/PrinceGabriel-lgtm/freshcontext-mcp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agentic Market:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agenticmarket.dev/princegabriel73/server" rel="noopener noreferrer"&gt;https://agenticmarket.dev/princegabriel73/server&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next step is not more feature sprawl.&lt;/p&gt;

&lt;p&gt;It is better distribution, evidence-led debugging, and watching which surfaces people actually use.&lt;/p&gt;

&lt;p&gt;I’m also testing a few FreshContext reviews this week. If you’re shipping an AI tool, MCP server, repo, launch page, or retrieval workflow, I can check for stale-context risk, broken public surfaces, weak provenance, version mismatches, and failure states that look too confident.&lt;/p&gt;

&lt;p&gt;Email: &lt;a href="mailto:gimmanuel73@gmail.com"&gt;gimmanuel73@gmail.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>startup</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Building FreshContext: Temporal Intelligence Infrastructure for AI Systems</title>
      <dc:creator>Immanuel Gabriel</dc:creator>
      <pubDate>Mon, 11 May 2026 20:59:57 +0000</pubDate>
      <link>https://forem.com/immanuel_gabriel_341393bf/building-freshcontext-temporal-intelligence-infrastructure-for-ai-systems-1lmd</link>
      <guid>https://forem.com/immanuel_gabriel_341393bf/building-freshcontext-temporal-intelligence-infrastructure-for-ai-systems-1lmd</guid>
      <description>&lt;p&gt;I’ve been building something called FreshContext.&lt;/p&gt;

&lt;p&gt;The core idea is simple:&lt;/p&gt;

&lt;p&gt;AI systems often treat fresh and stale retrieved information as equally useful.&lt;/p&gt;

&lt;p&gt;FreshContext is an attempt to fix that.&lt;/p&gt;

&lt;p&gt;Instead of only retrieving information, the system applies temporal scoring before signals reach an LLM or agent workflow.&lt;/p&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;source timestamps matter&lt;/li&gt;
&lt;li&gt;decay matters&lt;/li&gt;
&lt;li&gt;provenance matters&lt;/li&gt;
&lt;li&gt;retrieval timing matters&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I built so far
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. FreshContext MCP
&lt;/h3&gt;

&lt;p&gt;A Cloudflare-native MCP server with 21 tools focused on freshness-aware retrieval and live intelligence workflows.&lt;/p&gt;

&lt;p&gt;Current stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cloudflare Workers&lt;/li&gt;
&lt;li&gt;D1&lt;/li&gt;
&lt;li&gt;KV&lt;/li&gt;
&lt;li&gt;structured JSON envelopes&lt;/li&gt;
&lt;li&gt;freshness scoring&lt;/li&gt;
&lt;li&gt;observability tooling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GitHub:&lt;br&gt;
&lt;a href="https://github.com/PrinceGabriel-lgtm/freshcontext-mcp" rel="noopener noreferrer"&gt;https://github.com/PrinceGabriel-lgtm/freshcontext-mcp&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Fresh HN Feed
&lt;/h3&gt;

&lt;p&gt;A freshness-ranked Hacker News signal feed.&lt;/p&gt;

&lt;p&gt;Instead of simply listing posts chronologically, the feed scores signals using temporal decay and relevance weighting.&lt;/p&gt;

&lt;p&gt;GitHub:&lt;br&gt;
&lt;a href="https://github.com/PrinceGabriel-lgtm/fresh-hn-feed" rel="noopener noreferrer"&gt;https://github.com/PrinceGabriel-lgtm/fresh-hn-feed&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Fresh Jobs Feed
&lt;/h3&gt;

&lt;p&gt;A freshness-ranked jobs API built on public job sources.&lt;/p&gt;

&lt;p&gt;The current focus is AI/ML-oriented roles, but the architecture is designed for broader signal ingestion later.&lt;/p&gt;

&lt;p&gt;GitHub:&lt;br&gt;
&lt;a href="https://github.com/PrinceGabriel-lgtm/fresh-jobs-feed" rel="noopener noreferrer"&gt;https://github.com/PrinceGabriel-lgtm/fresh-jobs-feed&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Live API:&lt;br&gt;
&lt;a href="https://fresh-jobs-feed.gimmanuel73.workers.dev" rel="noopener noreferrer"&gt;https://fresh-jobs-feed.gimmanuel73.workers.dev&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Ops Pulse
&lt;/h3&gt;

&lt;p&gt;One thing I learned quickly:&lt;br&gt;
observability matters.&lt;/p&gt;

&lt;p&gt;I built a separate operational analysis tool for monitoring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Workers&lt;/li&gt;
&lt;li&gt;D1&lt;/li&gt;
&lt;li&gt;cron ingestion&lt;/li&gt;
&lt;li&gt;runtime failures&lt;/li&gt;
&lt;li&gt;cache behavior&lt;/li&gt;
&lt;li&gt;external API failures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest improvement so far wasn’t a new feature.&lt;/p&gt;

&lt;p&gt;It was finally seeing the actual failure patterns clearly.&lt;/p&gt;




&lt;h2&gt;
  
  
  What surprised me
&lt;/h2&gt;

&lt;p&gt;The hardest part wasn’t generating responses.&lt;/p&gt;

&lt;p&gt;It was:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;freshness correctness&lt;/li&gt;
&lt;li&gt;runtime isolation&lt;/li&gt;
&lt;li&gt;cache correctness&lt;/li&gt;
&lt;li&gt;partial failure handling&lt;/li&gt;
&lt;li&gt;observability&lt;/li&gt;
&lt;li&gt;temporal consistency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The infrastructure side of AI systems is much deeper than I expected.&lt;/p&gt;




&lt;h2&gt;
  
  
  Current direction
&lt;/h2&gt;

&lt;p&gt;The long-term goal is turning FreshContext into a broader temporal intelligence platform:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;freshness-aware feeds&lt;/li&gt;
&lt;li&gt;agent retrieval infrastructure&lt;/li&gt;
&lt;li&gt;signal marketplaces&lt;/li&gt;
&lt;li&gt;operational intelligence&lt;/li&gt;
&lt;li&gt;temporal ranking APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Still very early.&lt;br&gt;
But the architecture is finally starting to stabilize.&lt;/p&gt;

&lt;p&gt;If you’re building retrieval systems, agents, MCP tooling, or Cloudflare-native AI infrastructure, I’d genuinely love to connect and learn from others working in this space.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>typescript</category>
      <category>worker</category>
    </item>
  </channel>
</rss>
