{"_id":"@trainheroic-unofficial/athlete-mcp","_rev":"46-3a8574caec9ff8eddc0809c566bcdef0","name":"@trainheroic-unofficial/athlete-mcp","dist-tags":{"latest":"4.0.0"},"versions":{"0.4.0":{"name":"@trainheroic-unofficial/athlete-mcp","version":"0.4.0","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@0.4.0","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"homepage":"https://github.com/alandotcom/trainheroic-unofficial#readme","bugs":{"url":"https://github.com/alandotcom/trainheroic-unofficial/issues"},"bin":{"trainheroic-athlete-mcp":"dist/server.mjs"},"dist":{"shasum":"73ab87d4adbdfc506c760b3e074a964a0e293687","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-0.4.0.tgz","fileCount":4,"integrity":"sha512-vWppOPLbZ0r/RdOtSJiCo5NT8QgrhiAiSac9I8AVjOZf0iRsNxhKY9UrIGRWy79P32mfxHD3b6m7Pm34hqHcmw==","signatures":[{"sig":"MEYCIQDhXJbbaCW1AHdVCA1bn8ETkjL+n8AShUEsTwlyRlhX7QIhAPiRGq6I+UpO2Zvv21P52m/r8ykqkDeczCMWeU4PSoLc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44742},"type":"module","_from":"file:trainheroic-unofficial-athlete-mcp-0.4.0.tgz","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"alanripple","email":"alan.mit@gmail.com"},"_resolved":"/private/var/folders/mr/qzjs54qd07l0zr2c3jqrdqhc0000gn/T/9d499a8a759eea7f8f202772d2e19cc1/trainheroic-unofficial-athlete-mcp-0.4.0.tgz","_integrity":"sha512-vWppOPLbZ0r/RdOtSJiCo5NT8QgrhiAiSac9I8AVjOZf0iRsNxhKY9UrIGRWy79P32mfxHD3b6m7Pm34hqHcmw==","repository":{"url":"git+https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"_npmVersion":"11.9.0","description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.29.0","@trainheroic-unofficial/js":"0.4.0","@trainheroic-unofficial/core":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsdown":"^0.22.3","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.0.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_0.4.0_1781990135646_0.8935480357943433","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@trainheroic-unofficial/athlete-mcp","version":"0.4.1","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@0.4.1","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"homepage":"https://github.com/alandotcom/trainheroic-unofficial#readme","bugs":{"url":"https://github.com/alandotcom/trainheroic-unofficial/issues"},"bin":{"trainheroic-athlete-mcp":"dist/server.mjs"},"dist":{"shasum":"e62b44ebc933a8d6264511abe89acb07cac595cb","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-0.4.1.tgz","fileCount":4,"integrity":"sha512-D5YeGBYhSZPcO+cVcD2nXLU1srGDlvT34bm370RHZSLy+WHOrqv2Uzde3AmDJxfIAwXiWMbXmWSZJDQiLFpfFA==","signatures":[{"sig":"MEQCICaKdmZgTbnMP4yNkZgpyUi3jGdWUDQ5PRAM3uUVWfLkAiB+wy2Lz0mT364yvpeEyBkT61MXCHBqO+5lb5yrrBPlBw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48434},"type":"module","_from":"file:trainheroic-unofficial-athlete-mcp-0.4.1.tgz","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"alanripple","email":"alan.mit@gmail.com"},"_resolved":"/private/var/folders/mr/qzjs54qd07l0zr2c3jqrdqhc0000gn/T/d9f9df4894391bdcf0ef360aadcd7863/trainheroic-unofficial-athlete-mcp-0.4.1.tgz","_integrity":"sha512-D5YeGBYhSZPcO+cVcD2nXLU1srGDlvT34bm370RHZSLy+WHOrqv2Uzde3AmDJxfIAwXiWMbXmWSZJDQiLFpfFA==","repository":{"url":"git+https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"_npmVersion":"11.9.0","description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.29.0","@trainheroic-unofficial/js":"0.4.1","@trainheroic-unofficial/core":"0.4.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsdown":"^0.22.3","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.0.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_0.4.1_1782008161857_0.25634723909209156","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@trainheroic-unofficial/athlete-mcp","version":"0.4.2","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@0.4.2","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"homepage":"https://github.com/alandotcom/trainheroic-unofficial#readme","bugs":{"url":"https://github.com/alandotcom/trainheroic-unofficial/issues"},"bin":{"trainheroic-athlete-mcp":"dist/server.mjs"},"dist":{"shasum":"dcf6eaa01ce2bebb1446ccbee4ea4812fd8cd730","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-0.4.2.tgz","fileCount":4,"integrity":"sha512-dip4i+D2T7nxmhEUfVkdqqVInoTQjMItgoAA1sYfWw4i65OQmHJoJnb3tLR5jiGdr8bMTyEbU81B82XZTEdUvw==","signatures":[{"sig":"MEUCIAkJh2EgIYdALcO/ZaP3RssF3gx9J60LF6LNbwt5ypyzAiEAvTrg210D5qKa4CkfEBxW5gC/3RXkCrOXByXMgrEP3K0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49716},"type":"module","_from":"file:trainheroic-unofficial-athlete-mcp-0.4.2.tgz","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"alanripple","email":"alan.mit@gmail.com"},"_resolved":"/private/var/folders/mr/qzjs54qd07l0zr2c3jqrdqhc0000gn/T/fe7062b02a945ca131c7b46950ed9d54/trainheroic-unofficial-athlete-mcp-0.4.2.tgz","_integrity":"sha512-dip4i+D2T7nxmhEUfVkdqqVInoTQjMItgoAA1sYfWw4i65OQmHJoJnb3tLR5jiGdr8bMTyEbU81B82XZTEdUvw==","repository":{"url":"git+https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"_npmVersion":"11.9.0","description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.29.0","@trainheroic-unofficial/js":"0.4.2","@trainheroic-unofficial/core":"0.4.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsdown":"^0.22.3","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.0.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_0.4.2_1782009010754_0.2610643071677008","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@trainheroic-unofficial/athlete-mcp","version":"0.5.0","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@0.5.0","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"homepage":"https://github.com/alandotcom/trainheroic-unofficial#readme","bugs":{"url":"https://github.com/alandotcom/trainheroic-unofficial/issues"},"bin":{"trainheroic-athlete-mcp":"dist/server.mjs"},"dist":{"shasum":"36a156bd0510633e5bdfe56f511ae64ae3949edd","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-0.5.0.tgz","fileCount":4,"integrity":"sha512-KY7p2PBMixTxVA9wRWkg7utA6KAEamwZUaSXOcWEpVIlPa4LyS3Nm3F9A82ctq3JBHccdQjnclA4xkf1BieGUg==","signatures":[{"sig":"MEYCIQDEzaKBhmSS8+PO6hklT20nh29fo3Lps9VEiqj51cOfKQIhAIiiFY3IRdutiClb5C3XYCCM+6crL+X5g1GnQRHymM4X","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51419},"type":"module","_from":"file:trainheroic-unofficial-athlete-mcp-0.5.0.tgz","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"alanripple","email":"alan.mit@gmail.com"},"_resolved":"/private/var/folders/mr/qzjs54qd07l0zr2c3jqrdqhc0000gn/T/8ee53aecd6dcfbd512d33c020747d0c4/trainheroic-unofficial-athlete-mcp-0.5.0.tgz","_integrity":"sha512-KY7p2PBMixTxVA9wRWkg7utA6KAEamwZUaSXOcWEpVIlPa4LyS3Nm3F9A82ctq3JBHccdQjnclA4xkf1BieGUg==","repository":{"url":"git+https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"_npmVersion":"11.9.0","description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.29.0","@trainheroic-unofficial/js":"0.5.0","@trainheroic-unofficial/core":"0.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsdown":"^0.22.3","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.0.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_0.5.0_1782012587985_0.36713568614948455","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@trainheroic-unofficial/athlete-mcp","version":"0.6.0","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@0.6.0","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"homepage":"https://github.com/alandotcom/trainheroic-unofficial#readme","bugs":{"url":"https://github.com/alandotcom/trainheroic-unofficial/issues"},"bin":{"trainheroic-athlete-mcp":"dist/server.mjs"},"dist":{"shasum":"5921c59aea01fa97c76b5bd39890b71b1a94427d","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-0.6.0.tgz","fileCount":4,"integrity":"sha512-ABxVkKh73g7fapEBk4uMdfsbic2wqrJlCCR6TeExUSndj+4FIUk6ae/bCQQzC6AO6i96cs20uWWHl19DPlbScA==","signatures":[{"sig":"MEUCIQClGxab4EFL9AP/w3TfhwJTTJ5/63jcCjjkcaBSFu8ZDQIgfhm4TNEtTts/C3ad5TqWUqh6Cb06yh4qdUWYHHQhwl8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51419},"type":"module","_from":"file:trainheroic-unofficial-athlete-mcp-0.6.0.tgz","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"alanripple","email":"alan.mit@gmail.com"},"_resolved":"/private/var/folders/mr/qzjs54qd07l0zr2c3jqrdqhc0000gn/T/bba9c38e8b62de81e2bb5fa04967275a/trainheroic-unofficial-athlete-mcp-0.6.0.tgz","_integrity":"sha512-ABxVkKh73g7fapEBk4uMdfsbic2wqrJlCCR6TeExUSndj+4FIUk6ae/bCQQzC6AO6i96cs20uWWHl19DPlbScA==","repository":{"url":"git+https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"_npmVersion":"11.9.0","description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.29.0","@trainheroic-unofficial/js":"0.6.0","@trainheroic-unofficial/core":"0.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsdown":"^0.22.3","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.0.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_0.6.0_1782064927163_0.7638231576642824","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@trainheroic-unofficial/athlete-mcp","version":"0.6.1","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@0.6.1","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"homepage":"https://github.com/alandotcom/trainheroic-unofficial#readme","bugs":{"url":"https://github.com/alandotcom/trainheroic-unofficial/issues"},"bin":{"trainheroic-athlete-mcp":"dist/server.mjs"},"dist":{"shasum":"2fb47887c07cc42dbbfe681b620786e678045411","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-0.6.1.tgz","fileCount":4,"integrity":"sha512-febAhI9g/8KkN8sE7icveYpy9OP3s/XSfRYUj8Xp3Y8TOnQcyzM9MRFg1XJaY9q7KcnFwluWe5njVP50LdWbFA==","signatures":[{"sig":"MEYCIQCZY8yWMj1sA/HRnY6+U1QWIzVwRtfLWwZ7GgyipnkSggIhAJB0xla+XqoWMF4tKvabl1Uqk8ADs/7wHbG7ohrN+rIO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59989},"type":"module","_from":"file:trainheroic-unofficial-athlete-mcp-0.6.1.tgz","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"alanripple","email":"alan.mit@gmail.com"},"_resolved":"/private/var/folders/mr/qzjs54qd07l0zr2c3jqrdqhc0000gn/T/8189f27803f4d88f7c2963393147a4ad/trainheroic-unofficial-athlete-mcp-0.6.1.tgz","_integrity":"sha512-febAhI9g/8KkN8sE7icveYpy9OP3s/XSfRYUj8Xp3Y8TOnQcyzM9MRFg1XJaY9q7KcnFwluWe5njVP50LdWbFA==","repository":{"url":"git+https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"_npmVersion":"11.9.0","description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.29.0","@trainheroic-unofficial/js":"0.6.1","@trainheroic-unofficial/core":"0.6.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsdown":"^0.22.3","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.0.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_0.6.1_1782070700332_0.19160683399378464","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@trainheroic-unofficial/athlete-mcp","version":"0.6.2","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@0.6.2","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"c788ba042061ba3add27ef2374b03f23f15fb15d","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-0.6.2.tgz","fileCount":4,"integrity":"sha512-3R0LIDXeSNhXWw3GSUzyK8m7rMAYqXD5IDe4VZCnSeZfX6KF/qbwRJ+8to5IIgn3KdL+FetuG7rPDq5caXeJeg==","signatures":[{"sig":"MEQCIENGP+CkDVY3BAVsykl63hvVlwT8wRdwkJ0iC8NT2QBAAiBOKXS/CHyF23KxVDbhpmQyURmLTO42jdcGNU4wZGDS1w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@0.6.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":59989},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.29.0","@trainheroic-unofficial/js":"0.6.2","@trainheroic-unofficial/core":"0.6.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsdown":"^0.22.3","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.0.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_0.6.2_1782072583609_0.9692560609609322","host":"s3://npm-registry-packages-npm-production"}},"0.6.3":{"name":"@trainheroic-unofficial/athlete-mcp","version":"0.6.3","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@0.6.3","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"2d582eab1c1e9c84c816a5c75de88f006dedb9cf","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-0.6.3.tgz","fileCount":4,"integrity":"sha512-zKXgH8Ftbc2IM1m/SE/1TTc5k1wxjc+JLv3kYiiiyYG3WDl7pKPD/oSsbWEo0jUR0WoA6qTzveXTB3UvKEXiLQ==","signatures":[{"sig":"MEYCIQD0rapX+8xCVy48ddkb3nY75I2euW24CKWGHdFDHb9WfwIhAIr2oeyko+pJQMPzeFzntZykRDxZl6lNaPywUDcQ+tUt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@0.6.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":62318},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.29.0","@trainheroic-unofficial/js":"0.6.3","@trainheroic-unofficial/core":"0.6.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsdown":"^0.22.3","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.0.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_0.6.3_1782078637688_0.8667558898790715","host":"s3://npm-registry-packages-npm-production"}},"0.6.4":{"name":"@trainheroic-unofficial/athlete-mcp","version":"0.6.4","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@0.6.4","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"11deba8a2b08efdcf962289a12e78331a07a9d13","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-0.6.4.tgz","fileCount":4,"integrity":"sha512-5NuzpfASeWTfT2/j8mFd82ltEqRKmFVsnrIJr+YmBv2O1VMwVSPV3KYFq1DswNT5FiaRft0Jo8Vnq99dugI8mw==","signatures":[{"sig":"MEQCIQDr0o4y0VS3mGJnJfecnL8n2ybT2rix99NGiTumJD4/TAIfW/+cC2oFHiM6aSAex8Pxlo3TvAZJUbHbAeueODJObw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@0.6.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":62318},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.29.0","@trainheroic-unofficial/js":"0.6.4","@trainheroic-unofficial/core":"0.6.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsdown":"^0.22.3","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.0.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_0.6.4_1782079500851_0.10184852389880494","host":"s3://npm-registry-packages-npm-production"}},"0.6.5":{"name":"@trainheroic-unofficial/athlete-mcp","version":"0.6.5","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@0.6.5","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"4bc2356643bee4126ccf9ba91c808303a759072b","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-0.6.5.tgz","fileCount":4,"integrity":"sha512-RyO0/ULkPAXTiHuz2D/KiiySNv98D1sbv7cJo1C8SuQJFgz4fY/yQtap5mrhtJvQf6gJ95MY1B6+KTqS4Ny2zw==","signatures":[{"sig":"MEUCIAWjfe27/HW7GHboOPtqZq23DjVhv+oFA5EdQtoDPsaWAiEAwX179F2P1HUDobRYmbAwDv+yz6zmKWczyvQzqyKeGiw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@0.6.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":64831},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.29.0","@trainheroic-unofficial/js":"0.6.5","@trainheroic-unofficial/core":"0.6.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsdown":"^0.22.3","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.0.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_0.6.5_1782099705066_0.8627251057798719","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@trainheroic-unofficial/athlete-mcp","version":"1.0.0","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@1.0.0","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"a8a22a55f2bec2f6fe6e2d106d34dd4afa46732e","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-1.0.0.tgz","fileCount":4,"integrity":"sha512-pfuhry8wuO4ekZv/Dpl6OI2AcW45i7IGSvgtto0kG8ovtUnPNbnj9ny0a2ATWoaddXfu5zopOqnva6Lb917BJg==","signatures":[{"sig":"MEUCIQDTtNhyDFwgHsXT6kVutKvmEVlUTgJW1V9OUm/6nthKAAIgKDjdA9Br7gaFjW1ld7tq2GQubtbPsfeZS3DMaOzS25g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":64831},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.29.0","@trainheroic-unofficial/js":"1.0.0","@trainheroic-unofficial/core":"1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsdown":"^0.22.3","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.0.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_1.0.0_1782103842770_0.4071201767550079","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@trainheroic-unofficial/athlete-mcp","version":"1.1.0","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@1.1.0","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"c8412aca701a1362ddbbf07393cb026cf0bb8392","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-1.1.0.tgz","fileCount":4,"integrity":"sha512-nKJmqKRVp7FwHWdewI0fwPbbMDrNAobu3bE67tznhI9lRx8ncfD557+DFV2x5fLVrHZ3gf9/H8Qnzav7gCDr3Q==","signatures":[{"sig":"MEQCICjjZo9OU8/bCTQ6f7qJeqm8Dwksr8chHnvRr6VKuMdnAiANXytOHyppN6Le5Xtv9wCLz49QN8IO74p+54bxs9Qg9Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":72922},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.29.0","@trainheroic-unofficial/js":"1.1.0","@trainheroic-unofficial/core":"1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsdown":"^0.22.3","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.0.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_1.1.0_1782105134748_0.32475234105384243","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@trainheroic-unofficial/athlete-mcp","version":"1.1.1","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@1.1.1","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"242463184761c29c19e9608ccc763e05beda9294","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-1.1.1.tgz","fileCount":4,"integrity":"sha512-Km7Jc7Mi+FY4aPvlO6mOvqJkcWMu6LLLYp+yw1MlfRQ1AsTSIQyd2eqrlnwehdgQ6xoCFSlP1LWM3GPfEwjU7g==","signatures":[{"sig":"MEYCIQDsTtjKODDRFF2PfYGtMf7yCLgiLqmA0NeFXQklYcO07AIhAJrR4W3YroO8QWUP1Gtf1HU5iEAZsW9NHWChw8ab3yT3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":72865},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.29.0","@trainheroic-unofficial/js":"1.1.1","@trainheroic-unofficial/core":"1.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsdown":"^0.22.3","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.0.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_1.1.1_1782148392724_0.04668582687979228","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@trainheroic-unofficial/athlete-mcp","version":"1.2.0","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@1.2.0","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"6bfb764ecd3db54617ab18cabaac0d265bc634e9","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-1.2.0.tgz","fileCount":4,"integrity":"sha512-VVqoo0SInE0ztGtw6Ui2Ep+GsveGJ0hGApNpElYYFq+pHzGrsrlPArNjDktrK1mX1p20JzACuPhbXTI4woPhXg==","signatures":[{"sig":"MEQCIDl8ajoNVgBuokhYvpM4h+1Gk0JkxdqloAfjG32pMdi9AiBo/0TJ6vNhgOonDexmehExxEmHS/qqojcq5/LsYsoYqw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":74047},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.29.0","@trainheroic-unofficial/js":"1.2.0","@trainheroic-unofficial/core":"1.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsdown":"^0.22.3","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.0.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_1.2.0_1782163127185_0.47874399843274973","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@trainheroic-unofficial/athlete-mcp","version":"1.3.0","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@1.3.0","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"7c68d32e1359f2edaf57bfd5335a0f446eb6508c","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-1.3.0.tgz","fileCount":4,"integrity":"sha512-33QODSuok9j/fu1sMID5Vf1wNPXcHdh33IPU29+KJVxqlBoq7Zla5oYFy2NDL4qW6XJcKOiMVM17D9JA9pZXYA==","signatures":[{"sig":"MEYCIQDQYk3eRPz32I+yCl+V8xeQgSYfeUrqYy74Nj7d5HtURQIhAIsK70c9CL41tvtLwYtJdHozijOv8kFxZA/Tho4pwOV/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":74122},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.29.0","@trainheroic-unofficial/js":"1.3.0","@trainheroic-unofficial/core":"1.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsdown":"^0.22.3","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.0.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_1.3.0_1782167367624_0.9917345350716442","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@trainheroic-unofficial/athlete-mcp","version":"1.4.0","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@1.4.0","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"91245dd0b28092c5e52b7468384189a77c35d818","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-1.4.0.tgz","fileCount":4,"integrity":"sha512-x9d4m9XY/Pec7yr4+JoC2t/VvfcdbfeTMk9/0EvPt8Pd2acYCf3FEh2XntL4/eD9wLgHCbpihgthpseB5xZD5g==","signatures":[{"sig":"MEUCIQDPIQXtD+sYpL/dmQXSZLYUWfv/qT2jfS90onIZSZ6UBAIgXgQ/0CuMSfUw/OQq47nA2TzLRW9VGARAPh45k685KUY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":75672},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.29.0","@trainheroic-unofficial/js":"1.4.0","@trainheroic-unofficial/core":"1.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsdown":"^0.22.3","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.0.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_1.4.0_1782180304081_0.020325244803370612","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@trainheroic-unofficial/athlete-mcp","version":"1.5.0","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@1.5.0","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"74a9fae002cf3dd4dc75256df2cd8f2428dd63aa","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-1.5.0.tgz","fileCount":4,"integrity":"sha512-oqCn0I/g5Mf9K2B0e2ir90094lRzH0EyrNbDO+Pq8j6W3447Ndiy27p70CGyHc1cgKhtuc2oV0KvVNjwSEXdBA==","signatures":[{"sig":"MEUCIQDFvLk1e6dcyTrIEZffI71CBWlKgUWPLkeRDsioUUbo6AIgeOCb10FaR6RVHYI7/LtZ2BXyoZIglAws87GKE8NnJvY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@1.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":81356},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.17.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.29.0","@trainheroic-unofficial/js":"1.5.0","@trainheroic-unofficial/core":"1.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsdown":"^0.22.3","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.0.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_1.5.0_1782496477120_0.9599009213692749","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@trainheroic-unofficial/athlete-mcp","version":"1.6.0","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@1.6.0","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"be8b1916628bf36430a561e11197daf5c1e05d2f","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-1.6.0.tgz","fileCount":4,"integrity":"sha512-n3T4n711o7fQQE9k/9w1MAvKuWkSKRHmr+SvJP9IvHL7iEgpgG05lo6OAEivSX3oU4R7mTcuFEKuZ7OifSmiLw==","signatures":[{"sig":"MEUCIQC7YXrLBD/IivHX2HMaxc4J7lxdZpRhF+TRCfTUhdE2bwIgfwBnGfFyfVkMkLJ510JO89ThDwtbbxWKLW3hJs3z8UA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@1.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":94262},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.29.0","@trainheroic-unofficial/js":"1.6.0","@trainheroic-unofficial/core":"1.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsdown":"^0.22.3","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.0.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_1.6.0_1782844947098_0.9065697894582667","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"@trainheroic-unofficial/athlete-mcp","version":"1.6.1","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@1.6.1","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"69a77deba53a17ac4593b2c5c61a109fe74fcba9","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-1.6.1.tgz","fileCount":4,"integrity":"sha512-p16beAK1+kjFglNCeCaAE6uWKTYPbl722HTYLB9y4a0cjqvd+TR56OHjLk71+ayCPItdBm268WevEHx255aAtQ==","signatures":[{"sig":"MEUCIB1fJ2qCnsL774y4pzWxoDUWOgvmDwq/OFYG1rB/ZWThAiEAjZ4WOMdvsSWLt6CEJLuK3BPbiwrFfcIFbZhzw/CB22A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@1.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":94262},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.29.0","@trainheroic-unofficial/js":"1.6.1","@trainheroic-unofficial/core":"1.6.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsdown":"^0.22.3","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.0.1"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_1.6.1_1782865304965_0.9084901534484071","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@trainheroic-unofficial/athlete-mcp","version":"1.7.0","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@1.7.0","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"c3f69522f23412cf105ec37f9cfb358aec723a6c","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-1.7.0.tgz","fileCount":4,"integrity":"sha512-IiX5BilS/rJNyU9rS5gI4+0RRzQKIgEC/Hg6N9V1e7FUnftlb2LTuMhzRjyXBHsj+twrJC+spF/EgTxBmadCbg==","signatures":[{"sig":"MEQCID9fx0Wp45D7NWAgQRMNnkEjMWQAzXqXhgKKCt/FS5rpAiAA6+eOxgpsaP5Ab8UN5TNC3vTofY3//7WtiEfeg5ep1Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@1.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":100177},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.17.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.29.0","@trainheroic-unofficial/js":"1.7.0","@trainheroic-unofficial/core":"1.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsdown":"^0.22.3","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.0.1"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_1.7.0_1782945576826_0.8109984013101859","host":"s3://npm-registry-packages-npm-production"}},"1.7.1":{"name":"@trainheroic-unofficial/athlete-mcp","version":"1.7.1","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@1.7.1","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"aa68acde662abc4b57aeec844e9886e353d5082d","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-1.7.1.tgz","fileCount":4,"integrity":"sha512-5zMWi98b2gdx+8a8/uGb7qaQzepcqw9CGIPq7t4EOgLFO1H4XLl5aUUP1B32blFRvIfEMYqZXXGTRppvj6vkUA==","signatures":[{"sig":"MEQCIFILd5cIzcaYka0BtyvyLmswH6RG8R3dKRRaFMh0dCzZAiA5xpfMi/xi2U7br1JHfUHxfZdKnMJnIyNakhy6iw1Olg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@1.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":101578},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.29.0","@trainheroic-unofficial/js":"1.7.1","@trainheroic-unofficial/core":"1.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsdown":"^0.22.3","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.0.1"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_1.7.1_1783028361727_0.5154179784834456","host":"s3://npm-registry-packages-npm-production"}},"1.7.2":{"name":"@trainheroic-unofficial/athlete-mcp","version":"1.7.2","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@1.7.2","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"b2c2cfaf84a03349faf88428a1e5de3da542ed84","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-1.7.2.tgz","fileCount":4,"integrity":"sha512-B1m6TRJ7ytohbhDUmP3jtxLtCchF3WtAsKpceJ9gn81yQuyfUklzOhgFmvdwNZla+EN2OIYPUz9VR/BqtAunaA==","signatures":[{"sig":"MEQCIH9Tho72l0KYrOUwS/r6j2Cu03LHC3Vw+aVBaTo/wNa4AiApRolScdeLDX/Bb1I43II/szSWbS1z0tI+Kfise4TqfA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@1.7.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":101982},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.29.0","@trainheroic-unofficial/js":"1.7.2","@trainheroic-unofficial/core":"1.7.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","tsdown":"^0.22.3","vitest":"^4.1.9","typescript":"^6.0.3","@types/node":"^26.0.1"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_1.7.2_1783355827964_0.843858478130999","host":"s3://npm-registry-packages-npm-production"}},"1.7.3":{"name":"@trainheroic-unofficial/athlete-mcp","version":"1.7.3","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@1.7.3","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"c9e87e28caad9945c8a6f1eae5d699bdad0971a4","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-1.7.3.tgz","fileCount":4,"integrity":"sha512-bnr2jiAwAUm8yQAsKqNINK/AdSlndoQcUQ/KbCt75YaW7A6LZFwLLX9/Iqb3nrnalIUkq4mG4KVLvXo/M+jEOQ==","signatures":[{"sig":"MEQCICMY+JmCuBUknAO0V5prTHmL4GfMrtomcTE0tg4SseyJAiAMu6AW2mEpfGJorSI3I3BwbuY0PbImAjXTOnbkfdGjHw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@1.7.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":101519},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.29.0","@trainheroic-unofficial/js":"1.7.3","@trainheroic-unofficial/core":"1.7.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.0","tsdown":"^0.22.3","vitest":"^4.1.10","typescript":"^6.0.3","@types/node":"^26.1.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_1.7.3_1783713991620_0.09465118621720059","host":"s3://npm-registry-packages-npm-production"}},"1.7.4":{"name":"@trainheroic-unofficial/athlete-mcp","version":"1.7.4","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@1.7.4","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"ec0632df0253756dc66ba299d432742085419a7a","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-1.7.4.tgz","fileCount":4,"integrity":"sha512-SQWy1kbdmITTl1jqc0Mc7Qa29v4TSwpexKEtQ/Hid9vXsL1j6HBx5oL3YeFxs8z/pXxeFpLwGlyMIPA6vrVCxA==","signatures":[{"sig":"MEQCIDGTUm/a4soUudBL3Zb1tET8cVEeEc20pTzsDmSolLDwAiBGXH90VqnH4j/0Ovkl1x9wNGgQiY9W/IGGxdKb9Uwflw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@1.7.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":101519},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.29.0","@trainheroic-unofficial/js":"1.7.4","@trainheroic-unofficial/core":"1.7.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.0","tsdown":"^0.22.3","vitest":"^4.1.10","typescript":"^6.0.3","@types/node":"^26.1.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_1.7.4_1785788549713_0.5567571718982518","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@trainheroic-unofficial/athlete-mcp","version":"2.0.0","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@2.0.0","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"9540d8b2bfa17c43428183195da49b2eb7f62d01","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-2.0.0.tgz","fileCount":4,"integrity":"sha512-6wtc89huB4WaiWralZfsOp3Lcc7ccWtgNE8fHwosMCG9vz45YoT4Q96xDQsbMarU3Rz3ZPncSh39ggATscr4hQ==","signatures":[{"sig":"MEUCIQCzdWKgTnpsP2gUEjZ8Mk+ntOUFWhDN2gubLHpIXerw+QIgQam80vkAuUWc0srKf0J067Mt22qH1jRK/wMh6IxuijQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":103476},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","@trainheroic-unofficial/js":"2.0.0","@modelcontextprotocol/server":"2.0.0","@trainheroic-unofficial/core":"2.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.4","tsdown":"^0.22.14","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_2.0.0_1786058976702_0.9686467323544405","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@trainheroic-unofficial/athlete-mcp","version":"2.0.1","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@2.0.1","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"983bc530fe61a3a9bbf3ae7fd2df14cf64dfe437","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-2.0.1.tgz","fileCount":4,"integrity":"sha512-kwSNAmZ+JMMIXacLZT9PHrZxLFPppPItPquQ92IZSuFVl59C/9GgNBzfgQ1X/PbFBcdvKPeADv6zZOpF6HUauQ==","signatures":[{"sig":"MEYCIQDoobpxg9Ay5Rf4g2kWlm9Z4QWYZUQ6LfawVfCbzJ5IsgIhALH6oJaJwIvlnF4s8maPPW6ZJar/nuw8krs9VvJ8vegD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":103476},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","@trainheroic-unofficial/js":"2.0.1","@modelcontextprotocol/server":"2.0.0","@trainheroic-unofficial/core":"2.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.4","tsdown":"^0.22.14","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_2.0.1_1786059510957_0.2897761908702672","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@trainheroic-unofficial/athlete-mcp","version":"2.0.2","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@2.0.2","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"69d7152c980c4776ab619f95f93d9801aea1f6cb","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-2.0.2.tgz","fileCount":4,"integrity":"sha512-yCb+vE7B8U2L27yrUmqqyvtGzeetAwOu2eDtW2qWE4+pK1YN9SKAhpguvGAw9jygw2NOdpRybnq74HD4QdHbvA==","signatures":[{"sig":"MEUCIQChZ5WTyNb1Nvjx1wqQD1yqatvfCC09P1WkjViO5STuDwIgCAi0I6q83HFIyxYs4vWsePG1TLjc2eUFsazSFwTdUNc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@2.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":104336},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.4.3","@trainheroic-unofficial/js":"2.0.2","@modelcontextprotocol/server":"2.0.0","@trainheroic-unofficial/core":"2.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.4","tsdown":"^0.22.14","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_2.0.2_1786065539739_0.2111889318930309","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@trainheroic-unofficial/athlete-mcp","version":"2.1.0","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@2.1.0","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"26cb0894e1f56e7e1cda8faaff608ffdc134fd49","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-2.1.0.tgz","fileCount":4,"integrity":"sha512-PbWJqnaKSgw8kMqq1OqKilkO5iQUCk8OlOn2jKEgcRNF/j/03DHVrP7BWNdqeNDMPrUyJaDi8uWgxfoUMY7JRA==","signatures":[{"sig":"MEUCIQCl5IjF2zvh69PZtDvxmNDtwCQT/lX7NXl9fnCERgdxAwIgJfX7gsRIblEpVCedCZ9BNJWYHmnYAHB2Y9Y9qBf52tk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@2.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":104620},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","@trainheroic-unofficial/js":"2.1.0","@modelcontextprotocol/server":"2.0.0","@trainheroic-unofficial/core":"2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.4","tsdown":"^0.22.14","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.1.2"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_2.1.0_1786067272671_0.1879116774182401","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@trainheroic-unofficial/athlete-mcp","version":"2.1.1","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@2.1.1","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"e756d055c31a7646b1a3c1754dacae4b6b003063","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-2.1.1.tgz","fileCount":4,"integrity":"sha512-61j45JWM7DrLbf9pleEP2Vda8V4g5YN4g2x+20bb8Q0AeCbkghldEczDIa2cr31Vmz1jFbVsrVS8kn7rfHebxw==","signatures":[{"sig":"MEQCIH0KKJ67HVnghoryUTLAiuVaYJ6ropYGVgn6rNnTL6qgAiBX+P7BASsdhIDeahdsdughNNeQUYcja3Waar93Gz7zmA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@2.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":105863},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","@trainheroic-unofficial/js":"2.1.1","@modelcontextprotocol/server":"2.0.0","@trainheroic-unofficial/core":"2.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.11","tsdown":"^0.22.14","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.2.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_2.1.1_1786303176030_0.42865919715773426","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@trainheroic-unofficial/athlete-mcp","version":"3.0.0","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@3.0.0","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"2197810424d1121cb8dcbd858add52e26fb1a564","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-3.0.0.tgz","fileCount":4,"integrity":"sha512-10t+C7uTxdKJbGjA3xg1Pd8dAdE4q6eJ8WJ/YsIo2oV6bQvSuF4zOteYKNZaE00T2AFKmMvVvTQA01stncg/pw==","signatures":[{"sig":"MEQCIDyMcsI3Md50hqioWjRKA7y7NfKSrCC7JSLWbsTSJm0FAiBK2/3cz0qJ5JWbolPo6Z+QKh7Sx9vcjkMNqjRvnkxgeQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@3.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":105863},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","@trainheroic-unofficial/js":"3.0.0","@modelcontextprotocol/server":"2.0.0","@trainheroic-unofficial/core":"3.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.11","tsdown":"^0.22.14","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.2.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_3.0.0_1786373959845_0.016183528072147624","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"@trainheroic-unofficial/athlete-mcp","version":"3.0.1","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@3.0.1","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"172e919c22062e055dcecfdbac32e15781f67ad2","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-3.0.1.tgz","fileCount":4,"integrity":"sha512-co0Mtg7WnfaAoQT638SUbhrxodSaTyww61efLQRjhhRl7RXnOfgXu+giGBo0TqQAzCqXaCGiCF883tRfTJrplA==","signatures":[{"sig":"MEQCIBTuzoLUUrIOwt1ekVpUCEdec2nRXqkYCXbFJYqwuPmtAiB97R+88e+S4mfHODM7eCbv0KQv47jv+u8d7hGb6ZPlzA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@3.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":103882},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","@trainheroic-unofficial/js":"3.0.1","@modelcontextprotocol/server":"2.0.0","@trainheroic-unofficial/core":"3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.11","tsdown":"^0.22.14","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.2.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_3.0.1_1786398798551_0.38568931889596914","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"@trainheroic-unofficial/athlete-mcp","version":"3.1.0","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@3.1.0","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"d6a6b718610c3e9ab9d5952218aab3e7da868dda","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-3.1.0.tgz","fileCount":4,"integrity":"sha512-wYgZ0xQ9rp4g/T3IIuUWXDOu5uORrocaN9H8u46leo6PtIoYy6LQCIpkc6STsB+y4D0vR5MsMFfCEOyvmsBZAg==","signatures":[{"sig":"MEUCIHgA+2/yIspziRTsvdHS5GasCcgmYXN4Q2Bx18IKiFYOAiEAu22ROSJGdRD2484YF769hBRAX6HAuhKCpiWFwC9BcNg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@3.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":106738},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","@trainheroic-unofficial/js":"3.1.0","@modelcontextprotocol/server":"2.0.0","@trainheroic-unofficial/core":"3.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.11","tsdown":"^0.22.14","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.2.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_3.1.0_1786634958141_0.4911781101065793","host":"s3://npm-registry-packages-npm-production"}},"3.1.1":{"name":"@trainheroic-unofficial/athlete-mcp","version":"3.1.1","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@3.1.1","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"f09676a520932efe87f31c90f353d4d4a6cbe1fa","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-3.1.1.tgz","fileCount":4,"integrity":"sha512-Iu2yevDceyCA8YvbqUWc/FZRUYNurA1rJwbhI7pRHdeiL76W3xFtAQvfrRIhcQDOgERJ2XpvuOMtLfxRchsvtA==","signatures":[{"sig":"MEUCIQC1+Yl+HRyxUK0XMib+iaHtKn+3ZPlIQwxmeAYHZoWyYAIgX5z/Igv6jIeNwgfa3ahNfDURbzE64vmX6JR4CqwPqQg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@3.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":106985},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.4.3","@trainheroic-unofficial/js":"3.1.1","@modelcontextprotocol/server":"2.0.0","@trainheroic-unofficial/core":"3.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.11","tsdown":"^0.22.14","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.2.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_3.1.1_1786917930676_0.3241713307740579","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"name":"@trainheroic-unofficial/athlete-mcp","version":"3.2.0","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@3.2.0","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"b69aca8b87e1b5f1e1dda7a3c667d7c04fab90fd","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-3.2.0.tgz","fileCount":4,"integrity":"sha512-tZC1Pt5Q9ZA5xxvC+kBlZbrVLLo69Z3Zg5HGjfSnUx+xoHD+6d5qsfdcx219vpyyNAaT9SpIl3RbvS+X/OrEvw==","signatures":[{"sig":"MEQCIFl0ic0B18Ll/lOpJsAcncK5kgq4m1cyKAKtM660gmuQAiAfQFLrtM51vXsKjeJZmE0Wo2f0Pepqo4e1pfzLAz+0ig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@3.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":109194},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.4.3","@trainheroic-unofficial/js":"3.2.0","@modelcontextprotocol/server":"2.0.0","@trainheroic-unofficial/core":"3.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.11","tsdown":"^0.22.14","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.2.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_3.2.0_1786925690183_0.6462605833618573","host":"s3://npm-registry-packages-npm-production"}},"3.3.0":{"name":"@trainheroic-unofficial/athlete-mcp","version":"3.3.0","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@3.3.0","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"01cc62983b82df0fffadfbefb9e24708ae8a1e60","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-3.3.0.tgz","fileCount":4,"integrity":"sha512-bNmWxgknnUeLlgBfjS9jQ6fBf91kcTequKgnXFWv0ApR6isTrLIRe1xmgsSV2VgqTC2a5X5m8cgPZ7TEEbJURQ==","signatures":[{"sig":"MEUCIQCzOmeqXeh5mgbeWtz8gZEOg3w1WHkeKU8CgzapgrYTVQIgQsgcCiXS2NiDxYKCBPdtRqfkMdRH+s+uXUbZn4QPtpk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@3.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":121579},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.4.3","@trainheroic-unofficial/js":"3.3.0","@modelcontextprotocol/server":"2.0.0","@trainheroic-unofficial/core":"3.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsdown":"^0.22.14","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.2.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_3.3.0_1787195986016_0.7043434388544281","host":"s3://npm-registry-packages-npm-production"}},"3.3.1":{"name":"@trainheroic-unofficial/athlete-mcp","version":"3.3.1","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@3.3.1","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"16597ab2239db80dc7f188f73056bf2d3da19083","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-3.3.1.tgz","fileCount":4,"integrity":"sha512-RYMAJB6bReNJ7Ze2oWMloAy7PkHMLcF7zlrXjEite+si+fngwxp/aYNB0+aCXSPp7IbPK/YslOVaV5+ryk0oFQ==","signatures":[{"sig":"MEQCIBwwII8TP9sutUf8Du0iExrUxNrHXvZaSSXx37DeEiMfAiBDarLaJiRk6WkYJKLBiDBi+CLALcRT1+C8Qzir7iUW+g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@3.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":121579},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.4.3","@trainheroic-unofficial/js":"3.3.1","@modelcontextprotocol/server":"2.0.0","@trainheroic-unofficial/core":"3.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsdown":"^0.22.14","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.2.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_3.3.1_1787244524165_0.9329899266290189","host":"s3://npm-registry-packages-npm-production"}},"3.3.2":{"name":"@trainheroic-unofficial/athlete-mcp","version":"3.3.2","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@3.3.2","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"5825efcba748c8e600d0e40b50c280bee169b310","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-3.3.2.tgz","fileCount":4,"integrity":"sha512-cKZNk32QmQihHIVYmD11EOtjSVvROWc/QIfPEceTHysWk515yNfBIHLRiIkrr3vvkCJqnsltT57yPOs4cjgZBQ==","signatures":[{"sig":"MEUCICDOyy53tlPXg7Lj2WjsoFFBwN5mHFpfwFWKKackDaIyAiEAlJag2IFwJAg4P3dXcNMAabG8AOEYEfRVYPTi/GFYzQQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@3.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":121579},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.4.3","@trainheroic-unofficial/js":"3.3.2","@modelcontextprotocol/server":"2.0.0","@trainheroic-unofficial/core":"3.3.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsdown":"^0.22.14","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.2.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_3.3.2_1787256099146_0.6275516407428194","host":"s3://npm-registry-packages-npm-production"}},"3.3.3":{"name":"@trainheroic-unofficial/athlete-mcp","version":"3.3.3","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@3.3.3","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"5bf73dea8c0a99f11d0e59a4408cd14e102490c0","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-3.3.3.tgz","fileCount":4,"integrity":"sha512-1Bvw1mz/GRBvJTIrCRmBLWwKDT7pk1pkfoXiiLNEb9rYFs/62lsNbWJ9kvBZa3yZpxPY+ZzZKR+0rCW0MbW+NQ==","signatures":[{"sig":"MEUCIQD4YVUy3pz7RGRLO0CYy0IYguy88ViHH8Yu1aBR06BaPwIgebBkTK+F5whfMe2U7h2xrLV9avVXWlu2YW9viVgvkGw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@3.3.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":121582},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.4.3","@trainheroic-unofficial/js":"3.3.3","@modelcontextprotocol/server":"2.0.0","@trainheroic-unofficial/core":"3.3.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsdown":"^0.22.14","vitest":"^4.1.10","typescript":"^7.0.2","@types/node":"^26.2.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_3.3.3_1787258023883_0.8386877187716579","host":"s3://npm-registry-packages-npm-production"}},"3.4.0":{"name":"@trainheroic-unofficial/athlete-mcp","version":"3.4.0","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@3.4.0","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"de0e337cc65888e3160c442977d48193e4b866f1","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-3.4.0.tgz","fileCount":4,"integrity":"sha512-Apq1PcZhx6tCdrnFDYSFpZvAuGghckUtS0D0Rjw8t35HYaPmYe/277Z2Yd5Bq1P6EGvQc2/P9ZdPfX/xtbUXCw==","signatures":[{"sig":"MEQCIAP6bDINjGAeVjnnAR3BPHq2Eg4TwKVFv40euhpN91DxAiAaJ1waz99PhGtO05cCBKymqNG6uYBFpg7is418xv1suQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@3.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":126122},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.4.3","@trainheroic-unofficial/js":"3.4.0","@modelcontextprotocol/server":"2.0.0","@trainheroic-unofficial/core":"3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsdown":"^0.22.14","vitest":"^4.1.11","typescript":"^7.0.2","@types/node":"^26.3.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_3.4.0_1787812279525_0.12204795932546775","host":"s3://npm-registry-packages-npm-production"}},"3.5.0":{"name":"@trainheroic-unofficial/athlete-mcp","version":"3.5.0","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@3.5.0","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"4ce0b82ae7e61aa94ca49ee2810d51d72d0ed709","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-3.5.0.tgz","fileCount":4,"integrity":"sha512-O95dt1FNQqQ/qCtWXo99QNyjuBKHXMWXhiBURlqtb/OGkQaTKjj456QzYyHIwq6TptcnG+G759qx1kkR+Yry4w==","signatures":[{"sig":"MEYCIQCn4gLusGKi0E3nVlTsr1FQIvgi0MyIE0x3T528bQPPygIhALWQuG/MtMZ1jLNfYu4mEcVSdPm0Z3yd3AIKQvNxifv1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@3.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":130066},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.4.3","@trainheroic-unofficial/js":"3.5.0","@modelcontextprotocol/server":"2.0.0","@trainheroic-unofficial/core":"3.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsdown":"^0.22.14","vitest":"^4.1.11","typescript":"^7.0.2","@types/node":"^26.3.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_3.5.0_1787874393726_0.18437921712694805","host":"s3://npm-registry-packages-npm-production"}},"3.5.1":{"name":"@trainheroic-unofficial/athlete-mcp","version":"3.5.1","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@3.5.1","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"a59669c95dc39fe20f6ed89b7d55effe573b1fd0","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-3.5.1.tgz","fileCount":4,"integrity":"sha512-HwgZrvXhYe2lSKY3hjofECRiwdJsKH6yLlgv9U7qLESxI2ocTvdmuNPCQhWNoh+orz3mxPCiKu8Edchro/n/Lw==","signatures":[{"sig":"MEQCIB2alpZg5MkExUAi4YNPwQjWUkbAyapRcBgiFFI30GS4AiABmSZElc4L+8lVMV8TpduNNEl1WfOBoM8E8ottpRRSuw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@3.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":130428},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.4.3","@trainheroic-unofficial/js":"3.5.1","@modelcontextprotocol/server":"2.0.0","@trainheroic-unofficial/core":"3.5.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsdown":"^0.22.14","vitest":"^4.1.11","typescript":"^7.0.2","@types/node":"^26.3.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_3.5.1_1788283005767_0.14515323097567556","host":"s3://npm-registry-packages-npm-production"}},"3.5.2":{"name":"@trainheroic-unofficial/athlete-mcp","version":"3.5.2","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@3.5.2","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"03d0c00a6d5c34f583271d998ea9b3514866b584","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-3.5.2.tgz","fileCount":4,"integrity":"sha512-S3oEMwLB7ZQ2GtuM8ojojrw56LcrUlzCx5LAi9/unAkDVR5yuU45wt/I208peErLnezCSVLdlKbWkbn6wvotaA==","signatures":[{"sig":"MEUCIQC1iF5BSCrwBc+WxduLwB0Lk+BKVoZwUMW0Z61BekoulQIgJoef5d4qC+YXFITm740BBirFwMBGzy4Dwb41RHDdMbc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@3.5.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":138188},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.4.3","@trainheroic-unofficial/js":"3.5.2","@modelcontextprotocol/server":"2.0.0","@trainheroic-unofficial/core":"3.5.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsdown":"^0.22.14","vitest":"^4.1.11","typescript":"^7.0.2","@types/node":"^26.3.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_3.5.2_1788377843280_0.39984867133260127","host":"s3://npm-registry-packages-npm-production"}},"3.6.0":{"name":"@trainheroic-unofficial/athlete-mcp","version":"3.6.0","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@3.6.0","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"397348eb4cd4bfdcf384f3573de264023e19683c","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-3.6.0.tgz","fileCount":4,"integrity":"sha512-pb4gS6xsEp3z+wE/KC5W7nhxuQB5ebCUeyjiwNfIpo8jK+/P30aV9tkP7HWZRM2zSi8DV8Yf527xsONxFWCiHQ==","signatures":[{"sig":"MEYCIQCQ3+4AdSbvyACUwfrgCe75Ns28tXVaeApgoWaHJpY9YQIhAOMef8SNHO3zbj/t7sfUWHoBLK5iP1ghpZa03noBGEFv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@3.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":143892},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^4.4.3","@trainheroic-unofficial/js":"3.6.0","@modelcontextprotocol/server":"2.0.0","@trainheroic-unofficial/core":"3.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","tsdown":"^0.22.14","vitest":"^4.1.11","typescript":"^7.0.2","@types/node":"^26.3.0"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_3.6.0_1788764515571_0.8258395585006848","host":"s3://npm-registry-packages-npm-production"}},"3.7.1":{"name":"@trainheroic-unofficial/athlete-mcp","version":"3.7.1","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@3.7.1","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"67615a0940feeb11972a41bcb6cbe1eff7568b2c","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-3.7.1.tgz","fileCount":4,"integrity":"sha512-Znpxcp+zc3K/pfSu6zLcx5F1nbIQsGkIg8iBNhIeWXdfRmHtVaflPV4yylizVuj/4ZdNjkdPxXhPj7zgLpCEqw==","signatures":[{"sig":"MEQCIHJ3VztDElAEbclD67fzOuOLo1UZKKNuxcYg778PRiy9AiB/xGMNYlv7MulGSbs8pOzeNkICq5oVjPBgtpJYeohZzg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDnp53XaprQ3mKUlP2Mi2QYGw/LpwGFvJcUmis17W/bhwIhAIGW4BDScl7BmEONk1qrzyJj9Ok/PVe9rDQycf96qiyZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@3.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":147274},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^4.6.3","@trainheroic-unofficial/js":"3.7.1","@modelcontextprotocol/server":"2.0.0","@trainheroic-unofficial/core":"3.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.13","tsdown":"^0.23.0","vitest":"^4.1.11","typescript":"^7.0.2","@types/node":"^26.5.1"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_3.7.1_1789449529727_0.21470498113488112","host":"s3://npm-registry-packages-npm-production"}},"3.7.2":{"name":"@trainheroic-unofficial/athlete-mcp","version":"3.7.2","license":"MIT","_id":"@trainheroic-unofficial/athlete-mcp@3.7.2","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"66513b8ba36b548c947beef7fc8406ea5149d86a","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-3.7.2.tgz","fileCount":4,"integrity":"sha512-wV/KMaETg99TZ+9oj9aewdQH5hSl7gl+mMPJEG33wPy8DWOE9kmvq8aRry9LeExpxle+iJ32ywpoGWsJKR817g==","signatures":[{"sig":"MEUCIFE7pgHffCFLqfAHVpQu0y3Z5ekaL34nbsfFbRWo0T8sAiEA6ihehn9N2IQSubNbXzvzheUHY2GI6XreOQiM9619P0g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBwWgzSOhVtj7zweYn/X4aszZKSR5Y7M7qerE6+DCXLdAiAal/uYzPtfQ+zXp4GYqjvSABXw/C6g3idBi68f9Ao/JA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@3.7.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":148046},"type":"module","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^4.6.3","@trainheroic-unofficial/js":"3.7.2","@modelcontextprotocol/server":"2.0.0","@trainheroic-unofficial/core":"3.7.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.13","tsdown":"^0.23.0","vitest":"^4.1.11","typescript":"^7.0.2","@types/node":"^26.5.1"},"_npmOperationalInternal":{"tmp":"tmp/athlete-mcp_3.7.2_1790003380731_0.9434457364419726","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"_id":"@trainheroic-unofficial/athlete-mcp@4.0.0","bin":{"trainheroic-athlete-mcp":"./dist/server.mjs"},"dist":{"shasum":"bceb0d3358bc227ddb5c9707a065dd4e2ab0a88f","tarball":"https://registry.npmjs.org/@trainheroic-unofficial/athlete-mcp/-/athlete-mcp-4.0.0.tgz","fileCount":4,"integrity":"sha512-CguifnkXOUxwjzYzJBbHcwstB/4GZ1zfa043ckUhM9vvP9hUhNSwOU/FM7RY4n2ZL7zOj48HyxzfLkX8gSWR7A==","signatures":[{"sig":"MEUCIEWCvUwa24baHeIwH4wWoRR/bm7k00lsoKy0usMc+0RyAiEA7eKxjo27TfN1r6KobITEUXNSjxRxppNr3oD/4PIOzDI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEmIQUgPiJKvTiapfNIbNBsJIRMn2027qiCb1iunZ1grAiBKmq0BoUL/nZhUDTuWtlGeg2qhI1aoKNz6Mg43lm0Yqg=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@trainheroic-unofficial%2fathlete-mcp@4.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":148901},"name":"@trainheroic-unofficial/athlete-mcp","type":"module","license":"MIT","scripts":{"test":"vitest run --passWithNoTests","build":"tsdown","start":"tsx src/server.ts","inspect":"npx @modelcontextprotocol/inspector -e TRAINHEROIC_EMAIL=\"$TRAINHEROIC_EMAIL\" -e TRAINHEROIC_PASSWORD=\"$TRAINHEROIC_PASSWORD\" tsx src/server.ts","typecheck":"tsc --noEmit"},"version":"4.0.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b01f580c-2a46-40f3-9e4f-2791a55d93a1"}},"repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","directories":{},"maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.6.3","@trainheroic-unofficial/js":"4.0.0","@modelcontextprotocol/server":"2.0.0","@trainheroic-unofficial/core":"4.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.13","tsdown":"^0.23.0","vitest":"^4.1.11","typescript":"^7.0.2","@types/node":"^26.5.1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/athlete-mcp_4.0.0_1790131559921_0.6694596119707079"}}},"time":{"created":"2026-06-20T21:15:35.504Z","modified":"2026-09-23T02:46:00.434Z","0.4.0":"2026-06-20T21:15:35.775Z","0.4.1":"2026-06-21T02:16:02.038Z","0.4.2":"2026-06-21T02:30:10.890Z","0.5.0":"2026-06-21T03:29:48.122Z","0.6.0":"2026-06-21T18:02:07.328Z","0.6.1":"2026-06-21T19:38:20.464Z","0.6.2":"2026-06-21T20:09:43.745Z","0.6.3":"2026-06-21T21:50:37.828Z","0.6.4":"2026-06-21T22:05:01.002Z","0.6.5":"2026-06-22T03:41:45.251Z","1.0.0":"2026-06-22T04:50:42.896Z","1.1.0":"2026-06-22T05:12:14.893Z","1.1.1":"2026-06-22T17:13:12.867Z","1.2.0":"2026-06-22T21:18:47.332Z","1.3.0":"2026-06-22T22:29:27.747Z","1.4.0":"2026-06-23T02:05:04.221Z","1.5.0":"2026-06-26T17:54:37.257Z","1.6.0":"2026-06-30T18:42:27.228Z","1.6.1":"2026-07-01T00:21:45.110Z","1.7.0":"2026-07-01T22:39:36.961Z","1.7.1":"2026-07-02T21:39:21.933Z","1.7.2":"2026-07-06T16:37:08.127Z","1.7.3":"2026-07-10T20:06:31.749Z","1.7.4":"2026-08-03T20:22:29.890Z","2.0.0":"2026-08-06T23:29:36.862Z","2.0.1":"2026-08-06T23:38:31.082Z","2.0.2":"2026-08-07T01:18:59.925Z","2.1.0":"2026-08-07T01:47:52.818Z","2.1.1":"2026-08-09T19:19:36.193Z","3.0.0":"2026-08-10T14:59:19.969Z","3.0.1":"2026-08-10T21:53:18.680Z","3.1.0":"2026-08-13T15:29:18.290Z","3.1.1":"2026-08-16T22:05:30.826Z","3.2.0":"2026-08-17T00:14:50.343Z","3.3.0":"2026-08-20T03:19:46.173Z","3.3.1":"2026-08-20T16:48:44.334Z","3.3.2":"2026-08-20T20:01:39.283Z","3.3.3":"2026-08-20T20:33:44.041Z","3.4.0":"2026-08-27T06:31:19.671Z","3.5.0":"2026-08-27T23:46:33.876Z","3.5.1":"2026-09-01T17:16:45.955Z","3.5.2":"2026-09-02T19:37:23.439Z","3.6.0":"2026-09-07T07:01:55.695Z","3.7.1":"2026-09-15T05:18:49.893Z","3.7.2":"2026-09-21T15:09:40.816Z","4.0.0":"2026-09-23T02:46:00.024Z"},"license":"MIT","repository":{"url":"https://github.com/alandotcom/trainheroic-unofficial.git","type":"git","directory":"packages/athlete-mcp"},"description":"Local single-user MCP server for a TrainHeroic athlete. No database, no Cloudflare deps.","maintainers":[{"name":"alanripple","email":"alan.mit@gmail.com"}],"readme":"# @trainheroic-unofficial/athlete-mcp\n\nLocal single-user [MCP](https://modelcontextprotocol.io) server for a TrainHeroic **athlete**, exposing one [TrainHeroic](https://www.trainheroic.com) athlete's own training to any MCP-capable AI assistant as callable tools. It runs on your machine and speaks the MCP stdio transport, so the assistant launches it as a subprocess.\n\nIt reads two required environment variables, `TRAINHEROIC_EMAIL` and `TRAINHEROIC_PASSWORD` (your existing TrainHeroic login). These are real credentials in plaintext; the config below puts them in a file or shell history, so treat them as secrets.\n\nIt exposes the logged-in athlete's own training: scheduled and completed workouts, per-exercise history, PRs (personal records), working maxes, lifetime totals, and confirmation-gated training writes. Coaching capabilities (rosters, teams, programs, messaging) are available through [`@trainheroic-unofficial/coach-mcp`](../coach-mcp). A hosted version that holds credentials server-side behind OAuth and gives a coach login both the athlete and coaching tools is described in the [root README](../../README.md).\n\n---\n\n## Install\n\nNeeds Node (>= 18); the commands below fetch the package with `npx` on first run.\n\n### Claude Code\n\n```bash\nclaude mcp add trainheroic-athlete \\\n  -e TRAINHEROIC_EMAIL=athlete@example.com \\\n  -e TRAINHEROIC_PASSWORD=yourpassword \\\n  -- npx -y @trainheroic-unofficial/athlete-mcp\n```\n\n### Claude Desktop / `.mcp.json` / other stdio clients\n\nPut this in your client's MCP config. For Claude Desktop that's `claude_desktop_config.json`\n(macOS: `~/Library/Application Support/Claude/`; Windows: `%APPDATA%\\Claude\\`); for a\nproject-scoped Claude Code setup it's `.mcp.json` at the repo root.\n\n```json\n{\n  \"mcpServers\": {\n    \"trainheroic-athlete\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@trainheroic-unofficial/athlete-mcp\"],\n      \"env\": {\n        \"TRAINHEROIC_EMAIL\": \"athlete@example.com\",\n        \"TRAINHEROIC_PASSWORD\": \"yourpassword\"\n      }\n    }\n  }\n}\n```\n\nA coach account works here too: a TrainHeroic coach account also has its own athlete-side data, so it can read its own training through these tools. After it connects, ask the assistant something like \"show my recent workouts\" to confirm the tools are available.\n\n---\n\n## Tools\n\nThe assistant fills in each tool's parameters (dates are `YYYY-MM-DD`); your MCP client shows the\nfull schema for each. Writes are confirmation-gated.\n\n- `athlete_whoami`: identity (id, name, roles)\n- `athlete_profile`: lifetime totals + profile\n- `athlete_prefs`: notification/display preferences\n- `athlete_workouts`: scheduled + completed workouts in a date range, flattened into one list\n- `athlete_exercises`: search the exercises you've logged\n- `athlete_exercise_history`: per-exercise PRs + dated session history\n- `athlete_personal_records`: exercise personal records\n- `athlete_exercise_stats`: last performance + PR as of a date\n- `athlete_working_maxes`: working max per exercise\n- `athlete_leaderboard`: benchmark/test workout leaderboard\n\n**Write (confirmation-gated):**\n\n- `athlete_log_set`: logs completed set results to your training log. This is a real write\n  that your coach can see. It confirms before running: the server asks the client to confirm,\n  falling back to an explicit `confirm: true` argument when the client can't prompt.\n- `athlete_prescribe_set`: sets your planned reps and/or weight without recording the set as\n  completed. It replaces the selected exercise's whole prescription, so every planned set and\n  value to keep must be included.\n\n---\n\n## Develop\n\nRun `pnpm install` once at the repo root (Node >= 24, pnpm 11), then from this package. The\n`pnpm start`/`pnpm inspect` commands need `TRAINHEROIC_EMAIL` and `TRAINHEROIC_PASSWORD`\nexported in your shell. \"MCP Inspector\" is the [official MCP debugging UI](https://github.com/modelcontextprotocol/inspector).\n\n```bash\npnpm start       # run from source\npnpm inspect     # MCP Inspector UI against the source server\npnpm build       # tsdown → dist/server.mjs\npnpm typecheck\npnpm test\n```\n","readmeFilename":""}