March 18, 2025
I’m on a vibe coding kick where I want to make at least one app per day - the real goal is to make one per hour but we’ll see how that goes.
All work is done with Cursor IDE in Agent mode, Claude 3.7 Sonnet, and Wispr Flow so I can just talk to the AI and have it figure out what code to write. It’s surprising how much this this speeds things up.
The point of vibe coding is to just make stuff. Don’t worry about architecture, don’t worry about future extensions, just go. My years of experience building serious things for serious people have conditioned me against this sort of thing but as I get into it, I’m starting to think there’s something to it. Probably not for everything. It’s kind of like speed chess vs classical chess.
Another way to look at vibe coding is that it forces you to get out of the details around how something is done and focus on what needs to get done. This means you’re directing an AI instead of using it as an advisor or co-pilot.
Today’s work was focused on building an MCP Server to wrap the NIH’s RePORTER API. 90% of the app was finished within an hour and the other 10% took another hour ;-p
Here’s the code so you can run it yourself.
MCP-API Wrappers In a Nutshell
Wrapping existing APIs with MCPs is fairly straight-forward. The way I do it is to make a FastMCP project using this script and open it in Cursor. Then point Cursor Agent to your API specification URL, the MCP Python SDK codebase, and the MCP Server Quickstart and ask it to create an MCP server for the API using under instructions/mcp-api-template.py as a reference (if you didn’t use the bash script above, here’s the template).
Don’t expect working code in one shot; you’ll still need to grind a bit but I find this pattern accelerates development.
(written with Cursor Journal)
Summary:
This project focused on building an MCP (Model Context Protocol) server to query the NIH RePORTER API. The goal was to create a flexible way to search NIH funding data from AI-enabled tools (Claude Desktop in my case).
The process involved setting up the MCP server, troubleshooting dependency issues, and refining search capabilities. Major challenges included dependency management with UV, debugging FastMCP integration, and ensuring compatibility with cloud environments. Despite several roadblocks, the final implementation works well.
While this isn’t game changing tool by any stretch, it’s another example of putting the power of conversational interfaces on top of data APIs. NIHs RePORTER has a perfectly nice interface but who wants to fill out advanced search fields? Blech.
Another nicety is that by querying NIH’s API directly, we can get more details than via web search. To demonstrate, I ran the same query through this MCP and vanilla Perplexity (results below). The MCP response is more accurate and detailed but Perplexity’s response includes information the NIH API doesn’t have, like info on grants from pharma companies.
Both Perplexity and ChatGPT’s Deep Research were also good (results not shown) but took several minutes to compile, missed some details, and gave more information that I really wanted. Still, it’s useful to see how different AI tools complemented one another.
Setting Up the MCP Server
I started by laying the groundwork for an MCP server that could interface with the NIH Reporter API. Using the FastMCP tool, I scaffolded the project and provided documentation to guide the development process.
The MCP server is structured with logging to capture server activity and errors, a Class with all our functions to call the NIH API, and a set of tools that Claude can use during a chat.
Implementing and Testing Search Features
Once the basic structure was in place, I moved on to implementing search capabilities. I wanted to support various search parameters, such as:
Fiscal year filtering
Searching by Principal Investigator (PI)
Querying based on institutions and grants
Testing was a key focus, ensuring that each search returned the expected results. For example, a fiscal year search returned 82,428 matching projects, confirming that the API integration was functioning properly.
Debugging Dependency and Environment Issues
Challenges arose when trying to run the MCP server outside the development environment, particularly within Claude Desktop. The following issues had to be addressed:
Missing FastMCP Module: Despite being installed, the server repeatedly failed to locate the FastMCP library.
Path and Virtual Environment Conflicts: Some MCP servers used UV for dependency management, while others didn't, causing inconsistencies.
Read-Only File System Errors: The server was unable to write logs in certain environments, leading to additional debugging.
To resolve these, I had the AI explore:
Ensuring the UV lock file was correctly populated.
Checking Python paths and virtual environment settings.
Referring to Claude's MCP debugging documentation.
Create README and Licensing Files
With the core functionality in place, I had Claude create:
README: Ensured installation instructions reflected UV usage instead of pip.
Contributing Guidelines: Followed standard GitHub best practices.
License Selection: Added an MIT license for open-source distribution.
Final Deployment and Running in Claude Desktop
Once the server code was tested (using fastmcp dev), I made it available in Claude Desktop by updating Claude’s configuration file. There’s often a problem with paths but this time there was one with package management. After a bit of back-and-forth it was resolved and the tool worked.
There was a bug that went unnoticed for a while; the search publications tool wasn’t returning results. This probably would have stayed broken if I didn’t notice a syntax problem in a query constructed by Claude. I took this issue back to Cursor, showed it to the Agent, explained the error and the AI rewrote working code. Bug squashed.
Comparing MCP With Perplexity
Query:
Please search for grants to Rajesh Mohandas in 2020 and give me a brief report of the projects and any associated publications.
NIH MCP Response
Report: Rajesh Mohandas NIH Grants (2020)
Grant Summary
Dr. Rajesh Mohandas was awarded two NIH grants in fiscal year 2020, both continuing the same research project on vascular complications in chronic kidney disease (CKD):
Grant #5K08HL130945-05 - $84,941
Institution: University of Florida, Gainesville, FL
Period: September 2016 to January 2022
Grant #7K08HL130945-06 - $67,771
Institution: LSU Health Sciences Center, New Orleans, LA
Period: June 2023 to May 2024
Research Focus
Dr. Mohandas's research investigates the molecular mechanisms linking chronic kidney disease (CKD) to cardiovascular complications, specifically focusing on:
The role of lysyl oxidase (LOX) in mediating arterial stiffness in CKD
How ROCK1 (rho-kinase isoform) regulates smooth muscle migration and proliferation in response to vascular stiffness
Evaluating the role of lysyl oxidase and rho kinase in atherosclerosis in CKD models
Key Findings and Significance
The research addresses a critical public health concern: cardiovascular disease remains the leading cause of death in patients with CKD. Dr. Mohandas's work proposes a novel mechanism where:
Lysyl oxidase (LOX), an enzyme that crosslinks collagen and elastin, is upregulated in vascular smooth muscle cells in CKD
This upregulation contributes to increased arterial stiffness
The increased stiffness activates ROCK1, potentially leading to vascular smooth muscle cell migration and proliferation
This cascade may accelerate atherosclerosis in CKD patients
Related Publications (2018-2023)
While the search didn't return publications directly linked to the project number, Dr. Mohandas published several relevant papers during the grant period:
"Involvement of lysyl oxidase in the pathogenesis of arterial stiffness in chronic kidney disease" (2023) - Most directly related to the grant's focus on lysyl oxidase
"Microvascular dysfunction and kidney disease: Challenges and opportunities?" (2021)
"Circulating endothelial cells as predictor of long-term mortality and adverse cardiovascular outcomes in hemodialysis patients" (2021)
"Association of early initiation of dialysis with all-cause and cardiovascular mortality" (2021)
"Circadian rhythms and renal pathophysiology" (2022)
Conclusion
Dr. Mohandas's research aims to identify new therapeutic targets for preventing cardiovascular complications in CKD patients by focusing on vascular smooth muscle cells and mechanisms of arterial stiffness. His work has potential applications beyond CKD to other conditions characterized by vascular stiffening and atherosclerosis.
Perplexity Response
Based on the search results, there is no specific information about grants awarded to Rajesh Mohandas in 2020. However, the search results provide information about grants awarded to him in subsequent years:
In 2023, Rajesh Mohandas, MD (Medicine/Nephrology) received a National Institutes of Health (K08) grant for a project titled "Vascular Smooth Muscle Lysyl Oxidase Mediated Increase in Vessel Stiffness and its Effect on Rho-Kinase Mechanosensors"8.
In 2024, Rajesh Mohandas, MD (Medicine/Nephrology and Hypertension) received grants from pharmaceutical companies for the following clinical trials5:
A study with Bayer Healthcare Pharmaceuticals on finerenone and empagliflozin in participants with chronic kidney disease and type 2 diabetes.
A study with Mineralys Therapeutics, Inc. on lorundrostat in adults with chronic kidney disease.
A study with Pathalys Pharma, Inc. on PLS240 for secondary hyperparathyroidism in individuals with end-stage kidney disease on hemodialysis.
While these grants were not awarded in 2020, they demonstrate Dr. Mohandas' ongoing research activities in nephrology and hypertension.
Regarding associated publications, the search results do not provide specific information about publications directly linked to these grants. However, Dr. Mohandas has published numerous papers in the field of nephrology and cardiovascular complications of kidney disease3.
Citations:
https://www.medschool.lsuhsc.edu/pulse_archive/2024_06/grants.aspx
https://www.ahajournals.org/doi/pdf/10.1161/HYPERTENSIONAHA.121.17022
https://www.medschool.lsuhsc.edu/pulse_archive/2023_09/sept23_grants.aspx
https://nephrology.medicine.ufl.edu/about-us/meet-the-team/rajesh-mohandas/
http://www.akmg.org/downloads/AKMG-Reporter-LR-Spring2019.pdf
Answer from Perplexity: pplx.ai/share