<div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:large"><br></div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">---------- Forwarded message ---------<br>From: <strong class="gmail_sendername" dir="auto">Marc Perry</strong> <span dir="auto"><<a href="mailto:marcperryster@gmail.com">marcperryster@gmail.com</a>></span><br>Date: Thu, Mar 26, 2026 at 3:26 PM<br>Subject: Re: [tpm] Meeting tonight?<br>To: James E Keenan <<a href="mailto:jkeenan@pobox.com">jkeenan@pobox.com</a>><br></div><br><br><div dir="ltr"><div style="font-family:verdana,sans-serif;font-size:large"><a href="https://luma.com/bdom1gut?tk=gG6BLS" target="_blank">https://luma.com/bdom1gut?tk=gG6BLS</a> <br></div><div style="font-family:verdana,sans-serif;font-size:large"><br></div><div style="font-family:verdana,sans-serif;font-size:large"><span style="color:rgb(0,0,0);font-family:-webkit-standard;font-size:medium">Topic:<span> </span></span><span><a href="http://toronto.pm/" rel="noopener noreferrer" style="color:rgb(18,100,163);text-decoration:none" target="_blank">Toronto.pm</a></span><span style="color:rgb(0,0,0);font-family:-webkit-standard;font-size:medium"><span> </span>- Lembark talk</span><br aria-hidden="true" style="color:rgb(0,0,0)"><span style="color:rgb(0,0,0);font-family:-webkit-standard;font-size:medium">    Time: Mar 26, 2026 07:00 PM Eastern Time (US and Canada)</span><br aria-hidden="true" style="color:rgb(0,0,0)"><span style="color:rgb(0,0,0);font-family:-webkit-standard;font-size:medium">    </span><span><a href="https://us02web.zoom.us/j/83060065332?pwd=5caWQ49cB9yr4VCRseNWNEoVFmHCoo.1" rel="noopener noreferrer" style="color:rgb(18,100,163);text-decoration:none" target="_blank">https://us02web.zoom.us/j/83060065332?pwd=5caWQ49cB9yr4VCRseNWNEoVFmHCoo.1</a></span><br aria-hidden="true" style="color:rgb(0,0,0)"><span style="color:rgb(0,0,0);font-family:-webkit-standard;font-size:medium">    Meeting ID: 830 6006 5332       Passcode: 670376</span><br></div><div style="font-family:verdana,sans-serif;font-size:large"><br></div><div style="font-family:verdana,sans-serif;font-size:large"><span style="color:rgb(0,0,0);font-family:-webkit-standard;font-size:medium">Designing Perly MCPs for Claude</span><br aria-hidden="true" style="color:rgb(0,0,0)"><span style="color:rgb(0,0,0);font-family:-webkit-standard;font-size:medium">The MCP standard allows defining actions for cases where the AI doesn’t already know how to glue</span><br aria-hidden="true" style="color:rgb(0,0,0)"><span style="color:rgb(0,0,0);font-family:-webkit-standard;font-size:medium">together shell commands or must make connections to specialized services like databases. From the AI</span><br aria-hidden="true" style="color:rgb(0,0,0)"><span style="color:rgb(0,0,0);font-family:-webkit-standard;font-size:medium">and user’s point of view this MCP is defined by its tool specification. This tells the AI when and how to</span><br aria-hidden="true" style="color:rgb(0,0,0)"><span style="color:rgb(0,0,0);font-family:-webkit-standard;font-size:medium">use the specific tools. Proper tool definition is critical to the proper selection and use of the tools.</span><br aria-hidden="true" style="color:rgb(0,0,0)"><span style="color:rgb(0,0,0);font-family:-webkit-standard;font-size:medium">As a trivial example we start with a time service based on enums to specify strftime formats for stan-</span><br aria-hidden="true" style="color:rgb(0,0,0)"><span style="color:rgb(0,0,0);font-family:-webkit-standard;font-size:medium">dard uses, descriptions to Claude on how to select and apply them. These could obviously be supplied</span><br aria-hidden="true" style="color:rgb(0,0,0)"><span style="color:rgb(0,0,0);font-family:-webkit-standard;font-size:medium">by the date(1) shell command, but the focus here is on making effective tool definitions and supporting</span><br aria-hidden="true" style="color:rgb(0,0,0)"><span style="color:rgb(0,0,0);font-family:-webkit-standard;font-size:medium">code and this is a suitably simple example. The next section describes approaches to configuring the</span><br aria-hidden="true" style="color:rgb(0,0,0)"><span style="color:rgb(0,0,0);font-family:-webkit-standard;font-size:medium">tool, showing basic descriptions and how to extend each of them for better accuracy in Claude’s calling</span><br aria-hidden="true" style="color:rgb(0,0,0)"><span style="color:rgb(0,0,0);font-family:-webkit-standard;font-size:medium">them. Following that will be examples of the data structures used by Claude to call the MCP and Perl</span><br aria-hidden="true" style="color:rgb(0,0,0)"><span style="color:rgb(0,0,0);font-family:-webkit-standard;font-size:medium">code for handling them effectively. The result is a small, efficient, lightweight module and executable</span><br aria-hidden="true" style="color:rgb(0,0,0)"><span style="color:rgb(0,0,0);font-family:-webkit-standard;font-size:medium">for generic MCP handling. The final sections describe extending the MCP to handle arguments and</span><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr"></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><br>
</blockquote></div>
</div></div>