Skip to content

Instantly share code, notes, and snippets.

View jeffhandley's full-sized avatar

Jeff Handley jeffhandley

View GitHub Profile
@jeffhandley
jeffhandley / unmatched-tool-arguments-report.md
Last active April 9, 2026 18:57
Unmatched Tool Arguments: Cross-SDK Behavior Report (MCP SDKs)

Unmatched Tool Arguments: Cross-SDK Behavior Report

Context

Issue #1508 in the C# MCP SDK reports that when an AI model calls a tool with arguments that don't match any declared parameter (e.g., sending phase when the tool defines taskId, update, and markComplete), the extra arguments are silently dropped. Both the model and the backend proceed without any signal that arguments were ignored, potentially leading to incorrect behavior.

This report investigates how each official MCP SDK (Tier 1 and Tier 2) plus FastMCP (PrefectHQ) handles this scenario across five dimensions:

  1. Code Implementation — Where in the code is the behavior controlled?
  2. Issue/PR Discussion — Has this behavior been discussed in issues or PRs?
@jeffhandley
jeffhandley / twitter-delete-data-via-ui.js
Last active November 8, 2024 21:19
Bulk delete Twitter data through the UI
let lastTweet = null,
lastReply = null,
lastRetweet = null,
lastFollower = null,
lastConversation = null;
const initialBackoff = 10000;
const backoffIncrease = 5000;
let backoff = initialBackoff;
@jeffhandley
jeffhandley / build-runtime.ps1
Created November 24, 2022 00:26
PowerShell alias for invoking the dotnet/runtime build script
# Yes, I hate having to type "./" _that_ much.
New-Alias -Name "build" -Value BuildRuntime
function BuildRuntime {
$root = $((git rev-parse --show-toplevel 2> $Null) ?? "").Replace("\", "/")
$runtime = (Resolve-Path "~/git/dotnet/runtime").Path.Replace("\", "/")
if ($root -eq $runtime) {
& "~/git/dotnet/runtime/build.cmd" $ARGS
@jeffhandley
jeffhandley / Scanner.cs
Last active April 17, 2021 21:35
Scan dotnet/runtime artifacts for assembly-level Platform Attributes
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
namespace Scanner
{
class Program
{
var strickland = require("strickland");
var validate = strickland.default;
var required = strickland.required;
var length = strickland.length;
var minLength = strickland.minLength;
var form = strickland.form;
var data = {
name: '',
phones: [
@jeffhandley
jeffhandley / droppedstyle.cshtml
Created January 31, 2018 22:49
Dropped Style
<style>
my-custom-class:before {
top: 0px;
/* this renders fine */
}
my-custom-class::before {
top: 0px;
/* this css class is not rendered */
}
@jeffhandley
jeffhandley / dont-need-do.jsx
Created December 7, 2017 15:39
You don't need `do` to have if statements in functions
function View({ loading, error, ...otherProps }) {
if (loading) {
return (<Loading />);
}
if (error) {
return (<Error error={error} />);
}
return (<MyLoadedComponent {...otherProps} />);
@jeffhandley
jeffhandley / PropDefinitions.jsx
Created November 6, 2017 17:14
Defining PropTypes for nested components
/* NameDisplay.js */
import ReactPropTypes from 'prop-types';
const NameDisplay = ({name}) => (
<div>
<div>
First Name: {name.first}
</div>
<div>
Last Name: {name.last}
@jeffhandley
jeffhandley / magic.js
Created August 6, 2017 10:31
Process your OneDrive Camera Roll into year/month folders
function loadCameraRoll(url, max, done) {
url = url || "https://graph.microsoft.com/v1.0/me/drive/special/cameraRoll/children";
max = max || 200;
console.log('LOADING PHOTOS');
$.ajax({
url: url,
dataType: "json",
headers: { "Authorization": "Bearer " + window.token },
@jeffhandley
jeffhandley / open-slack-profile-pictures.js
Created April 25, 2017 05:13
Open profile pictures for all members of a slack channel
document.querySelectorAll("#channel_page_all_members a.lazy.member_preview_link.member_image.thumb_20")
.forEach(function(member) {
window.open(member.dataset.original.replace(/^url\(\'(.*)-48\'\)$/, "$1-128"));
});