Inspiration

The idea for Stamped came from wanting an agent to do that tedious comparison work — read the resume once, check it against real openings, and help draft something specific instead of generic — while still leaving the actual "apply" decision in the user's hands.

What it does

I register three tools via document.modelContext.registerTool(): parseResume (extracts role, skills, and computed years of experience from an uploaded PDF), matchJobs (scores the parsed resume against open postings and returns ranked matches with reasoning), and draftCoverLetter (drafts a letter for a specific match, by its matchId). Each tool's execute function bridges into our Blazor Server backend via JS interop, so agent calls run through the same C# logic and database as the rest of the app. Deliberately, there is no submitApplication tool (that action exists only as a manual button in the UI, so no agent path can reach it).

How we built it

Using .net, llm, mock data, job board api, ef core

Challenges we ran into

Outdated Blazor.WebMcp, I needed to call document.modelContext for Chrome 152 and the package was still using navigator.modelContext. I dropped the package and wrote my own JS interop layer directly against the native API instead of waiting on an upstream update.

Accomplishments that we're proud of

Getting a full, working WebMCP tool chain live and testable end-to-end.

What we learned

This was my first time building with WebMCP and exposing tools to AI agents.

What's next for Stamped!

Track the WebMCP spec as it stabilizes. Get better job data.

Built With

Share this project:

Updates

Submission history