devskill 2.0.6 → 2.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/meta.ts +9 -1
- package/package.json +1 -1
- package/scripts/cli.ts +55 -10
- package/skills/algorithmic-art/LICENSE.txt +202 -0
- package/skills/algorithmic-art/SKILL.md +405 -0
- package/skills/algorithmic-art/SYNC.md +5 -0
- package/skills/algorithmic-art/templates/generator_template.js +223 -0
- package/skills/algorithmic-art/templates/viewer.html +599 -0
- package/skills/brand-guidelines/LICENSE.txt +202 -0
- package/skills/brand-guidelines/SKILL.md +73 -0
- package/skills/brand-guidelines/SYNC.md +5 -0
- package/skills/canvas-design/LICENSE.txt +202 -0
- package/skills/canvas-design/SKILL.md +130 -0
- package/skills/canvas-design/SYNC.md +5 -0
- package/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/skills/claude-api/LICENSE.txt +202 -0
- package/skills/claude-api/SKILL.md +246 -0
- package/skills/claude-api/SYNC.md +5 -0
- package/skills/claude-api/csharp/claude-api.md +400 -0
- package/skills/claude-api/curl/examples.md +193 -0
- package/skills/claude-api/go/claude-api.md +404 -0
- package/skills/claude-api/java/claude-api.md +430 -0
- package/skills/claude-api/php/claude-api.md +241 -0
- package/skills/claude-api/python/agent-sdk/README.md +345 -0
- package/skills/claude-api/python/agent-sdk/patterns.md +359 -0
- package/skills/claude-api/python/claude-api/README.md +410 -0
- package/skills/claude-api/python/claude-api/batches.md +185 -0
- package/skills/claude-api/python/claude-api/files-api.md +165 -0
- package/skills/claude-api/python/claude-api/streaming.md +162 -0
- package/skills/claude-api/python/claude-api/tool-use.md +590 -0
- package/skills/claude-api/ruby/claude-api.md +92 -0
- package/skills/claude-api/shared/error-codes.md +206 -0
- package/skills/claude-api/shared/live-sources.md +121 -0
- package/skills/claude-api/shared/models.md +119 -0
- package/skills/claude-api/shared/tool-use-concepts.md +305 -0
- package/skills/claude-api/typescript/agent-sdk/README.md +296 -0
- package/skills/claude-api/typescript/agent-sdk/patterns.md +209 -0
- package/skills/claude-api/typescript/claude-api/README.md +321 -0
- package/skills/claude-api/typescript/claude-api/batches.md +106 -0
- package/skills/claude-api/typescript/claude-api/files-api.md +98 -0
- package/skills/claude-api/typescript/claude-api/streaming.md +178 -0
- package/skills/claude-api/typescript/claude-api/tool-use.md +527 -0
- package/skills/doc-coauthoring/SKILL.md +375 -0
- package/skills/doc-coauthoring/SYNC.md +5 -0
- package/skills/docx/LICENSE.txt +30 -0
- package/skills/docx/SKILL.md +590 -0
- package/skills/docx/SYNC.md +5 -0
- package/skills/docx/scripts/__init__.py +1 -0
- package/skills/docx/scripts/accept_changes.py +135 -0
- package/skills/docx/scripts/comment.py +318 -0
- package/skills/docx/scripts/office/helpers/__init__.py +0 -0
- package/skills/docx/scripts/office/helpers/merge_runs.py +199 -0
- package/skills/docx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/skills/docx/scripts/office/pack.py +159 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/docx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/docx/scripts/office/soffice.py +183 -0
- package/skills/docx/scripts/office/unpack.py +132 -0
- package/skills/docx/scripts/office/validate.py +111 -0
- package/skills/docx/scripts/office/validators/__init__.py +15 -0
- package/skills/docx/scripts/office/validators/base.py +847 -0
- package/skills/docx/scripts/office/validators/docx.py +446 -0
- package/skills/docx/scripts/office/validators/pptx.py +275 -0
- package/skills/docx/scripts/office/validators/redlining.py +247 -0
- package/skills/docx/scripts/templates/comments.xml +3 -0
- package/skills/docx/scripts/templates/commentsExtended.xml +3 -0
- package/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
- package/skills/docx/scripts/templates/commentsIds.xml +3 -0
- package/skills/docx/scripts/templates/people.xml +3 -0
- package/skills/frontend-design/LICENSE.txt +177 -0
- package/skills/frontend-design/SKILL.md +42 -0
- package/skills/frontend-design/SYNC.md +5 -0
- package/skills/internal-comms/LICENSE.txt +202 -0
- package/skills/internal-comms/SKILL.md +32 -0
- package/skills/internal-comms/SYNC.md +5 -0
- package/skills/internal-comms/examples/3p-updates.md +47 -0
- package/skills/internal-comms/examples/company-newsletter.md +65 -0
- package/skills/internal-comms/examples/faq-answers.md +30 -0
- package/skills/internal-comms/examples/general-comms.md +16 -0
- package/skills/mcp-builder/LICENSE.txt +202 -0
- package/skills/mcp-builder/SKILL.md +236 -0
- package/skills/mcp-builder/SYNC.md +5 -0
- package/skills/mcp-builder/reference/evaluation.md +602 -0
- package/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
- package/skills/mcp-builder/reference/node_mcp_server.md +970 -0
- package/skills/mcp-builder/reference/python_mcp_server.md +719 -0
- package/skills/mcp-builder/scripts/connections.py +151 -0
- package/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/skills/next-best-practices/SKILL.md +153 -0
- package/skills/next-best-practices/SYNC.md +5 -0
- package/skills/next-best-practices/async-patterns.md +87 -0
- package/skills/next-best-practices/bundling.md +180 -0
- package/skills/next-best-practices/data-patterns.md +297 -0
- package/skills/next-best-practices/debug-tricks.md +105 -0
- package/skills/next-best-practices/directives.md +73 -0
- package/skills/next-best-practices/error-handling.md +227 -0
- package/skills/next-best-practices/file-conventions.md +140 -0
- package/skills/next-best-practices/font.md +245 -0
- package/skills/next-best-practices/functions.md +108 -0
- package/skills/next-best-practices/hydration-error.md +91 -0
- package/skills/next-best-practices/image.md +173 -0
- package/skills/next-best-practices/metadata.md +301 -0
- package/skills/next-best-practices/parallel-routes.md +287 -0
- package/skills/next-best-practices/route-handlers.md +146 -0
- package/skills/next-best-practices/rsc-boundaries.md +159 -0
- package/skills/next-best-practices/runtime-selection.md +39 -0
- package/skills/next-best-practices/scripts.md +141 -0
- package/skills/next-best-practices/self-hosting.md +371 -0
- package/skills/next-best-practices/suspense-boundaries.md +67 -0
- package/skills/next-cache-components/SKILL.md +411 -0
- package/skills/next-cache-components/SYNC.md +5 -0
- package/skills/next-upgrade/SKILL.md +50 -0
- package/skills/next-upgrade/SYNC.md +5 -0
- package/skills/pdf/LICENSE.txt +30 -0
- package/skills/pdf/SKILL.md +314 -0
- package/skills/pdf/SYNC.md +5 -0
- package/skills/pdf/forms.md +294 -0
- package/skills/pdf/reference.md +612 -0
- package/skills/pdf/scripts/check_bounding_boxes.py +65 -0
- package/skills/pdf/scripts/check_fillable_fields.py +11 -0
- package/skills/pdf/scripts/convert_pdf_to_images.py +33 -0
- package/skills/pdf/scripts/create_validation_image.py +37 -0
- package/skills/pdf/scripts/extract_form_field_info.py +122 -0
- package/skills/pdf/scripts/extract_form_structure.py +115 -0
- package/skills/pdf/scripts/fill_fillable_fields.py +98 -0
- package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
- package/skills/pptx/LICENSE.txt +30 -0
- package/skills/pptx/SKILL.md +232 -0
- package/skills/pptx/SYNC.md +5 -0
- package/skills/pptx/editing.md +205 -0
- package/skills/pptx/pptxgenjs.md +420 -0
- package/skills/pptx/scripts/__init__.py +0 -0
- package/skills/pptx/scripts/add_slide.py +195 -0
- package/skills/pptx/scripts/clean.py +286 -0
- package/skills/pptx/scripts/office/helpers/__init__.py +0 -0
- package/skills/pptx/scripts/office/helpers/merge_runs.py +199 -0
- package/skills/pptx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/skills/pptx/scripts/office/pack.py +159 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/pptx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/pptx/scripts/office/soffice.py +183 -0
- package/skills/pptx/scripts/office/unpack.py +132 -0
- package/skills/pptx/scripts/office/validate.py +111 -0
- package/skills/pptx/scripts/office/validators/__init__.py +15 -0
- package/skills/pptx/scripts/office/validators/base.py +847 -0
- package/skills/pptx/scripts/office/validators/docx.py +446 -0
- package/skills/pptx/scripts/office/validators/pptx.py +275 -0
- package/skills/pptx/scripts/office/validators/redlining.py +247 -0
- package/skills/pptx/scripts/thumbnail.py +289 -0
- package/skills/shadcn/LICENSE.md +21 -0
- package/skills/shadcn/SKILL.md +242 -0
- package/skills/shadcn/SYNC.md +5 -0
- package/skills/shadcn/agents/openai.yml +5 -0
- package/skills/shadcn/assets/shadcn-small.png +0 -0
- package/skills/shadcn/assets/shadcn.png +0 -0
- package/skills/shadcn/cli.md +257 -0
- package/skills/shadcn/customization.md +202 -0
- package/skills/shadcn/evals/evals.json +47 -0
- package/skills/shadcn/mcp.md +94 -0
- package/skills/shadcn/rules/base-vs-radix.md +306 -0
- package/skills/shadcn/rules/composition.md +195 -0
- package/skills/shadcn/rules/forms.md +192 -0
- package/skills/shadcn/rules/icons.md +101 -0
- package/skills/shadcn/rules/styling.md +162 -0
- package/skills/skill-creator/LICENSE.txt +202 -0
- package/skills/skill-creator/SKILL.md +485 -0
- package/skills/skill-creator/SYNC.md +5 -0
- package/skills/skill-creator/agents/analyzer.md +274 -0
- package/skills/skill-creator/agents/comparator.md +202 -0
- package/skills/skill-creator/agents/grader.md +223 -0
- package/skills/skill-creator/assets/eval_review.html +146 -0
- package/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/skills/skill-creator/references/schemas.md +430 -0
- package/skills/skill-creator/scripts/__init__.py +0 -0
- package/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/skills/skill-creator/scripts/generate_report.py +326 -0
- package/skills/skill-creator/scripts/improve_description.py +247 -0
- package/skills/skill-creator/scripts/package_skill.py +136 -0
- package/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/skills/skill-creator/scripts/run_eval.py +310 -0
- package/skills/skill-creator/scripts/run_loop.py +328 -0
- package/skills/skill-creator/scripts/utils.py +47 -0
- package/skills/slack-gif-creator/LICENSE.txt +202 -0
- package/skills/slack-gif-creator/SKILL.md +254 -0
- package/skills/slack-gif-creator/SYNC.md +5 -0
- package/skills/slack-gif-creator/core/easing.py +234 -0
- package/skills/slack-gif-creator/core/frame_composer.py +176 -0
- package/skills/slack-gif-creator/core/gif_builder.py +269 -0
- package/skills/slack-gif-creator/core/validators.py +136 -0
- package/skills/slack-gif-creator/requirements.txt +4 -0
- package/skills/theme-factory/LICENSE.txt +202 -0
- package/skills/theme-factory/SKILL.md +59 -0
- package/skills/theme-factory/SYNC.md +5 -0
- package/skills/theme-factory/theme-showcase.pdf +0 -0
- package/skills/theme-factory/themes/arctic-frost.md +19 -0
- package/skills/theme-factory/themes/botanical-garden.md +19 -0
- package/skills/theme-factory/themes/desert-rose.md +19 -0
- package/skills/theme-factory/themes/forest-canopy.md +19 -0
- package/skills/theme-factory/themes/golden-hour.md +19 -0
- package/skills/theme-factory/themes/midnight-galaxy.md +19 -0
- package/skills/theme-factory/themes/modern-minimalist.md +19 -0
- package/skills/theme-factory/themes/ocean-depths.md +19 -0
- package/skills/theme-factory/themes/sunset-boulevard.md +19 -0
- package/skills/theme-factory/themes/tech-innovation.md +19 -0
- package/skills/vue-best-practices/SYNC.md +1 -1
- package/skills/vue-jsx-best-practices/SYNC.md +1 -1
- package/skills/vue-options-api-best-practices/SYNC.md +1 -1
- package/skills/vue-pinia-best-practices/SYNC.md +1 -1
- package/skills/vue-router-best-practices/SYNC.md +1 -1
- package/skills/vue-testing-best-practices/SYNC.md +1 -1
- package/skills/web-artifacts-builder/LICENSE.txt +202 -0
- package/skills/web-artifacts-builder/SKILL.md +74 -0
- package/skills/web-artifacts-builder/SYNC.md +5 -0
- package/skills/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/skills/web-artifacts-builder/scripts/init-artifact.sh +322 -0
- package/skills/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/skills/webapp-testing/LICENSE.txt +202 -0
- package/skills/webapp-testing/SKILL.md +96 -0
- package/skills/webapp-testing/SYNC.md +5 -0
- package/skills/webapp-testing/examples/console_logging.py +35 -0
- package/skills/webapp-testing/examples/element_discovery.py +40 -0
- package/skills/webapp-testing/examples/static_html_automation.py +33 -0
- package/skills/webapp-testing/scripts/with_server.py +106 -0
- package/skills/xlsx/LICENSE.txt +30 -0
- package/skills/xlsx/SKILL.md +292 -0
- package/skills/xlsx/SYNC.md +5 -0
- package/skills/xlsx/scripts/office/helpers/__init__.py +0 -0
- package/skills/xlsx/scripts/office/helpers/merge_runs.py +199 -0
- package/skills/xlsx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/skills/xlsx/scripts/office/pack.py +159 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/xlsx/scripts/office/soffice.py +183 -0
- package/skills/xlsx/scripts/office/unpack.py +132 -0
- package/skills/xlsx/scripts/office/validate.py +111 -0
- package/skills/xlsx/scripts/office/validators/__init__.py +15 -0
- package/skills/xlsx/scripts/office/validators/base.py +847 -0
- package/skills/xlsx/scripts/office/validators/docx.py +446 -0
- package/skills/xlsx/scripts/office/validators/pptx.py +275 -0
- package/skills/xlsx/scripts/office/validators/redlining.py +247 -0
- package/skills/xlsx/scripts/recalc.py +184 -0
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
# Claude API — Java
|
|
2
|
+
|
|
3
|
+
> **Note:** The Java SDK supports the Claude API and beta tool use with annotated classes. Agent SDK is not yet available for Java.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
Maven:
|
|
8
|
+
|
|
9
|
+
```xml
|
|
10
|
+
<dependency>
|
|
11
|
+
<groupId>com.anthropic</groupId>
|
|
12
|
+
<artifactId>anthropic-java</artifactId>
|
|
13
|
+
<version>2.16.1</version>
|
|
14
|
+
</dependency>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Gradle:
|
|
18
|
+
|
|
19
|
+
```groovy
|
|
20
|
+
implementation("com.anthropic:anthropic-java:2.16.1")
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Client Initialization
|
|
24
|
+
|
|
25
|
+
```java
|
|
26
|
+
import com.anthropic.client.AnthropicClient;
|
|
27
|
+
import com.anthropic.client.okhttp.AnthropicOkHttpClient;
|
|
28
|
+
|
|
29
|
+
// Default (reads ANTHROPIC_API_KEY from environment)
|
|
30
|
+
AnthropicClient client = AnthropicOkHttpClient.fromEnv();
|
|
31
|
+
|
|
32
|
+
// Explicit API key
|
|
33
|
+
AnthropicClient client = AnthropicOkHttpClient.builder()
|
|
34
|
+
.apiKey("your-api-key")
|
|
35
|
+
.build();
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Basic Message Request
|
|
41
|
+
|
|
42
|
+
```java
|
|
43
|
+
import com.anthropic.models.messages.MessageCreateParams;
|
|
44
|
+
import com.anthropic.models.messages.Message;
|
|
45
|
+
import com.anthropic.models.messages.Model;
|
|
46
|
+
|
|
47
|
+
MessageCreateParams params = MessageCreateParams.builder()
|
|
48
|
+
.model(Model.CLAUDE_OPUS_4_6)
|
|
49
|
+
.maxTokens(16000L)
|
|
50
|
+
.addUserMessage("What is the capital of France?")
|
|
51
|
+
.build();
|
|
52
|
+
|
|
53
|
+
Message response = client.messages().create(params);
|
|
54
|
+
response.content().stream()
|
|
55
|
+
.flatMap(block -> block.text().stream())
|
|
56
|
+
.forEach(textBlock -> System.out.println(textBlock.text()));
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Streaming
|
|
62
|
+
|
|
63
|
+
```java
|
|
64
|
+
import com.anthropic.core.http.StreamResponse;
|
|
65
|
+
import com.anthropic.models.messages.RawMessageStreamEvent;
|
|
66
|
+
|
|
67
|
+
MessageCreateParams params = MessageCreateParams.builder()
|
|
68
|
+
.model(Model.CLAUDE_OPUS_4_6)
|
|
69
|
+
.maxTokens(64000L)
|
|
70
|
+
.addUserMessage("Write a haiku")
|
|
71
|
+
.build();
|
|
72
|
+
|
|
73
|
+
try (StreamResponse<RawMessageStreamEvent> streamResponse = client.messages().createStreaming(params)) {
|
|
74
|
+
streamResponse.stream()
|
|
75
|
+
.flatMap(event -> event.contentBlockDelta().stream())
|
|
76
|
+
.flatMap(deltaEvent -> deltaEvent.delta().text().stream())
|
|
77
|
+
.forEach(textDelta -> System.out.print(textDelta.text()));
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Thinking
|
|
84
|
+
|
|
85
|
+
**Adaptive thinking is the recommended mode for Claude 4.6+ models.** Claude decides dynamically when and how much to think. The builder has a direct `.thinking(ThinkingConfigAdaptive)` overload — no manual union wrapping.
|
|
86
|
+
|
|
87
|
+
```java
|
|
88
|
+
import com.anthropic.models.messages.ContentBlock;
|
|
89
|
+
import com.anthropic.models.messages.MessageCreateParams;
|
|
90
|
+
import com.anthropic.models.messages.Model;
|
|
91
|
+
import com.anthropic.models.messages.ThinkingConfigAdaptive;
|
|
92
|
+
|
|
93
|
+
MessageCreateParams params = MessageCreateParams.builder()
|
|
94
|
+
.model(Model.CLAUDE_SONNET_4_6)
|
|
95
|
+
.maxTokens(16000L)
|
|
96
|
+
.thinking(ThinkingConfigAdaptive.builder().build())
|
|
97
|
+
.addUserMessage("Solve this step by step: 27 * 453")
|
|
98
|
+
.build();
|
|
99
|
+
|
|
100
|
+
for (ContentBlock block : client.messages().create(params).content()) {
|
|
101
|
+
block.thinking().ifPresent(t -> System.out.println("[thinking] " + t.thinking()));
|
|
102
|
+
block.text().ifPresent(t -> System.out.println(t.text()));
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
> **Deprecated:** `ThinkingConfigEnabled.builder().budgetTokens(N)` (and the `.enabledThinking(N)` shortcut) still works on Claude 4.6 but is deprecated. Use adaptive thinking above.
|
|
107
|
+
|
|
108
|
+
`ContentBlock` narrowing: `.thinking()` / `.text()` return `Optional<T>` — use `.ifPresent(...)` or `.stream().flatMap(...)`. Alternative: `isThinking()` / `asThinking()` boolean+unwrap pairs (throws on wrong variant).
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Tool Use (Beta)
|
|
113
|
+
|
|
114
|
+
The Java SDK supports beta tool use with annotated classes. Tool classes implement `Supplier<String>` for automatic execution via `BetaToolRunner`.
|
|
115
|
+
|
|
116
|
+
### Tool Runner (automatic loop)
|
|
117
|
+
|
|
118
|
+
```java
|
|
119
|
+
import com.anthropic.models.beta.messages.MessageCreateParams;
|
|
120
|
+
import com.anthropic.models.beta.messages.BetaMessage;
|
|
121
|
+
import com.anthropic.helpers.BetaToolRunner;
|
|
122
|
+
import com.fasterxml.jackson.annotation.JsonClassDescription;
|
|
123
|
+
import com.fasterxml.jackson.annotation.JsonPropertyDescription;
|
|
124
|
+
import java.util.function.Supplier;
|
|
125
|
+
|
|
126
|
+
@JsonClassDescription("Get the weather in a given location")
|
|
127
|
+
static class GetWeather implements Supplier<String> {
|
|
128
|
+
@JsonPropertyDescription("The city and state, e.g. San Francisco, CA")
|
|
129
|
+
public String location;
|
|
130
|
+
|
|
131
|
+
@Override
|
|
132
|
+
public String get() {
|
|
133
|
+
return "The weather in " + location + " is sunny and 72°F";
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
BetaToolRunner toolRunner = client.beta().messages().toolRunner(
|
|
138
|
+
MessageCreateParams.builder()
|
|
139
|
+
.model("claude-opus-4-6")
|
|
140
|
+
.maxTokens(16000L)
|
|
141
|
+
.putAdditionalHeader("anthropic-beta", "structured-outputs-2025-11-13")
|
|
142
|
+
.addTool(GetWeather.class)
|
|
143
|
+
.addUserMessage("What's the weather in San Francisco?")
|
|
144
|
+
.build());
|
|
145
|
+
|
|
146
|
+
for (BetaMessage message : toolRunner) {
|
|
147
|
+
System.out.println(message);
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Memory Tool
|
|
152
|
+
|
|
153
|
+
The Java SDK provides `BetaMemoryToolHandler` for implementing the memory tool backend. You supply a handler that manages file storage, and the `BetaToolRunner` handles memory tool calls automatically.
|
|
154
|
+
|
|
155
|
+
```java
|
|
156
|
+
import com.anthropic.helpers.BetaMemoryToolHandler;
|
|
157
|
+
import com.anthropic.helpers.BetaToolRunner;
|
|
158
|
+
import com.anthropic.models.beta.messages.BetaMemoryTool20250818;
|
|
159
|
+
import com.anthropic.models.beta.messages.BetaMessage;
|
|
160
|
+
import com.anthropic.models.beta.messages.MessageCreateParams;
|
|
161
|
+
import com.anthropic.models.beta.messages.ToolRunnerCreateParams;
|
|
162
|
+
|
|
163
|
+
// Implement BetaMemoryToolHandler with your storage backend (e.g., filesystem)
|
|
164
|
+
BetaMemoryToolHandler memoryHandler = new FileSystemMemoryToolHandler(sandboxRoot);
|
|
165
|
+
|
|
166
|
+
MessageCreateParams createParams = MessageCreateParams.builder()
|
|
167
|
+
.model("claude-opus-4-6")
|
|
168
|
+
.maxTokens(4096L)
|
|
169
|
+
.addTool(BetaMemoryTool20250818.builder().build())
|
|
170
|
+
.addUserMessage("Remember that my favorite color is blue")
|
|
171
|
+
.build();
|
|
172
|
+
|
|
173
|
+
BetaToolRunner toolRunner = client.beta().messages().toolRunner(
|
|
174
|
+
ToolRunnerCreateParams.builder()
|
|
175
|
+
.betaMemoryToolHandler(memoryHandler)
|
|
176
|
+
.initialMessageParams(createParams)
|
|
177
|
+
.build());
|
|
178
|
+
|
|
179
|
+
for (BetaMessage message : toolRunner) {
|
|
180
|
+
System.out.println(message);
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
See the [shared memory tool concepts](../shared/tool-use-concepts.md) for more details on the memory tool.
|
|
185
|
+
|
|
186
|
+
### Non-Beta Tool Declaration (manual JSON schema)
|
|
187
|
+
|
|
188
|
+
`Tool.InputSchema.Properties` is a freeform `Map<String, JsonValue>` wrapper — build property schemas via `putAdditionalProperty`. `type: "object"` is the default. The builder has a direct `.addTool(Tool)` overload that wraps in `ToolUnion` automatically.
|
|
189
|
+
|
|
190
|
+
```java
|
|
191
|
+
import com.anthropic.core.JsonValue;
|
|
192
|
+
import com.anthropic.models.messages.Tool;
|
|
193
|
+
|
|
194
|
+
Tool tool = Tool.builder()
|
|
195
|
+
.name("get_weather")
|
|
196
|
+
.description("Get the current weather in a given location")
|
|
197
|
+
.inputSchema(Tool.InputSchema.builder()
|
|
198
|
+
.properties(Tool.InputSchema.Properties.builder()
|
|
199
|
+
.putAdditionalProperty("location", JsonValue.from(Map.of("type", "string")))
|
|
200
|
+
.build())
|
|
201
|
+
.required(List.of("location"))
|
|
202
|
+
.build())
|
|
203
|
+
.build();
|
|
204
|
+
|
|
205
|
+
MessageCreateParams params = MessageCreateParams.builder()
|
|
206
|
+
.model(Model.CLAUDE_SONNET_4_6)
|
|
207
|
+
.maxTokens(16000L)
|
|
208
|
+
.addTool(tool)
|
|
209
|
+
.addUserMessage("Weather in Paris?")
|
|
210
|
+
.build();
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
For manual tool loops, handle `tool_use` blocks in the response, send `tool_result` back, loop until `stop_reason` is `"end_turn"`. See [shared tool use concepts](../shared/tool-use-concepts.md).
|
|
214
|
+
|
|
215
|
+
### Building `MessageParam` with Content Blocks (Tool Result Round-Trip)
|
|
216
|
+
|
|
217
|
+
`MessageParam.Content` is an inner union class (string | list). Use the builder's `.contentOfBlockParams(List<ContentBlockParam>)` alias — there is NO separate `MessageParamContent` class with a static `ofBlockParams`:
|
|
218
|
+
|
|
219
|
+
```java
|
|
220
|
+
import com.anthropic.models.messages.MessageParam;
|
|
221
|
+
import com.anthropic.models.messages.ContentBlockParam;
|
|
222
|
+
import com.anthropic.models.messages.ToolResultBlockParam;
|
|
223
|
+
|
|
224
|
+
List<ContentBlockParam> results = List.of(
|
|
225
|
+
ContentBlockParam.ofToolResult(ToolResultBlockParam.builder()
|
|
226
|
+
.toolUseId(toolUseBlock.id())
|
|
227
|
+
.content(yourResultString)
|
|
228
|
+
.build())
|
|
229
|
+
);
|
|
230
|
+
|
|
231
|
+
MessageParam toolResultMsg = MessageParam.builder()
|
|
232
|
+
.role(MessageParam.Role.USER)
|
|
233
|
+
.contentOfBlockParams(results) // builder alias for Content.ofBlockParams(...)
|
|
234
|
+
.build();
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## Effort Parameter
|
|
240
|
+
|
|
241
|
+
Effort is nested inside `OutputConfig` — there is NO `.effort()` directly on `MessageCreateParams.Builder`.
|
|
242
|
+
|
|
243
|
+
```java
|
|
244
|
+
import com.anthropic.models.messages.OutputConfig;
|
|
245
|
+
|
|
246
|
+
.outputConfig(OutputConfig.builder()
|
|
247
|
+
.effort(OutputConfig.Effort.HIGH) // or LOW, MEDIUM, MAX
|
|
248
|
+
.build())
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
Combine with `Thinking = ThinkingConfigAdaptive` for cost-quality control.
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## Prompt Caching
|
|
256
|
+
|
|
257
|
+
System message as a list of `TextBlockParam` with `CacheControlEphemeral`. Use `.systemOfTextBlockParams(...)` — the plain `.system(String)` overload can't carry cache control.
|
|
258
|
+
|
|
259
|
+
```java
|
|
260
|
+
import com.anthropic.models.messages.TextBlockParam;
|
|
261
|
+
import com.anthropic.models.messages.CacheControlEphemeral;
|
|
262
|
+
|
|
263
|
+
.systemOfTextBlockParams(List.of(
|
|
264
|
+
TextBlockParam.builder()
|
|
265
|
+
.text(longSystemPrompt)
|
|
266
|
+
.cacheControl(CacheControlEphemeral.builder()
|
|
267
|
+
.ttl(CacheControlEphemeral.Ttl.TTL_1H) // optional; also TTL_5M
|
|
268
|
+
.build())
|
|
269
|
+
.build()))
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
There's also a top-level `.cacheControl(CacheControlEphemeral)` on `MessageCreateParams.Builder` and on `Tool.builder()`.
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## Token Counting
|
|
277
|
+
|
|
278
|
+
```java
|
|
279
|
+
import com.anthropic.models.messages.MessageCountTokensParams;
|
|
280
|
+
|
|
281
|
+
long tokens = client.messages().countTokens(
|
|
282
|
+
MessageCountTokensParams.builder()
|
|
283
|
+
.model(Model.CLAUDE_SONNET_4_6)
|
|
284
|
+
.addUserMessage("Hello")
|
|
285
|
+
.build()
|
|
286
|
+
).inputTokens();
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## Structured Output
|
|
292
|
+
|
|
293
|
+
The class-based overload auto-derives the JSON schema from your POJO and gives you a typed `.text()` return — no manual schema, no manual parsing.
|
|
294
|
+
|
|
295
|
+
```java
|
|
296
|
+
import com.anthropic.models.messages.StructuredMessageCreateParams;
|
|
297
|
+
|
|
298
|
+
record Book(String title, String author) {}
|
|
299
|
+
record BookList(List<Book> books) {}
|
|
300
|
+
|
|
301
|
+
StructuredMessageCreateParams<BookList> params = MessageCreateParams.builder()
|
|
302
|
+
.model(Model.CLAUDE_SONNET_4_6)
|
|
303
|
+
.maxTokens(16000L)
|
|
304
|
+
.outputConfig(BookList.class) // returns a typed builder
|
|
305
|
+
.addUserMessage("List 3 classic novels")
|
|
306
|
+
.build();
|
|
307
|
+
|
|
308
|
+
client.messages().create(params).content().stream()
|
|
309
|
+
.flatMap(cb -> cb.text().stream())
|
|
310
|
+
.forEach(typed -> {
|
|
311
|
+
// typed.text() returns BookList, not String
|
|
312
|
+
for (Book b : typed.text().books()) System.out.println(b.title());
|
|
313
|
+
});
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
Supports Jackson annotations: `@JsonPropertyDescription`, `@JsonIgnore`, `@ArraySchema(minItems=...)`. Manual schema path: `OutputConfig.builder().format(JsonOutputFormat.builder().schema(...).build())`.
|
|
317
|
+
|
|
318
|
+
---
|
|
319
|
+
|
|
320
|
+
## PDF / Document Input
|
|
321
|
+
|
|
322
|
+
`DocumentBlockParam` builder has source shortcuts. Wrap in `ContentBlockParam.ofDocument()` and pass via `.addUserMessageOfBlockParams()`.
|
|
323
|
+
|
|
324
|
+
```java
|
|
325
|
+
import com.anthropic.models.messages.DocumentBlockParam;
|
|
326
|
+
import com.anthropic.models.messages.ContentBlockParam;
|
|
327
|
+
import com.anthropic.models.messages.TextBlockParam;
|
|
328
|
+
|
|
329
|
+
DocumentBlockParam doc = DocumentBlockParam.builder()
|
|
330
|
+
.base64Source(base64String) // or .urlSource("https://...") or .textSource("...")
|
|
331
|
+
.title("My Document") // optional
|
|
332
|
+
.build();
|
|
333
|
+
|
|
334
|
+
.addUserMessageOfBlockParams(List.of(
|
|
335
|
+
ContentBlockParam.ofDocument(doc),
|
|
336
|
+
ContentBlockParam.ofText(TextBlockParam.builder().text("Summarize this").build())))
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
341
|
+
## Server-Side Tools
|
|
342
|
+
|
|
343
|
+
Version-suffixed types; `name`/`type` auto-set by builder. Direct `.addTool()` overloads exist for every type — no manual `ToolUnion` wrapping.
|
|
344
|
+
|
|
345
|
+
```java
|
|
346
|
+
import com.anthropic.models.messages.WebSearchTool20260209;
|
|
347
|
+
import com.anthropic.models.messages.ToolBash20250124;
|
|
348
|
+
import com.anthropic.models.messages.ToolTextEditor20250728;
|
|
349
|
+
import com.anthropic.models.messages.CodeExecutionTool20260120;
|
|
350
|
+
|
|
351
|
+
.addTool(WebSearchTool20260209.builder()
|
|
352
|
+
.maxUses(5L) // optional
|
|
353
|
+
.allowedDomains(List.of("example.com")) // optional
|
|
354
|
+
.build())
|
|
355
|
+
.addTool(ToolBash20250124.builder().build())
|
|
356
|
+
.addTool(ToolTextEditor20250728.builder().build())
|
|
357
|
+
.addTool(CodeExecutionTool20260120.builder().build())
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
Also available: `WebFetchTool20260209`, `MemoryTool20250818`, `ToolSearchToolBm25_20251119`.
|
|
361
|
+
|
|
362
|
+
### Beta namespace (MCP, compaction)
|
|
363
|
+
|
|
364
|
+
For beta-only features use `com.anthropic.models.beta.messages.*` — class names have a `Beta` prefix AND live in the beta package. The beta `MessageCreateParams.Builder` has direct `.addTool(BetaToolBash20250124)` overloads AND `.addMcpServer()`:
|
|
365
|
+
|
|
366
|
+
```java
|
|
367
|
+
import com.anthropic.models.beta.messages.MessageCreateParams;
|
|
368
|
+
import com.anthropic.models.beta.messages.BetaToolBash20250124;
|
|
369
|
+
import com.anthropic.models.beta.messages.BetaCodeExecutionTool20260120;
|
|
370
|
+
import com.anthropic.models.beta.messages.BetaRequestMcpServerUrlDefinition;
|
|
371
|
+
|
|
372
|
+
MessageCreateParams params = MessageCreateParams.builder()
|
|
373
|
+
.model(Model.CLAUDE_OPUS_4_6)
|
|
374
|
+
.maxTokens(16000L)
|
|
375
|
+
.addBeta("mcp-client-2025-11-20")
|
|
376
|
+
.addTool(BetaToolBash20250124.builder().build())
|
|
377
|
+
.addTool(BetaCodeExecutionTool20260120.builder().build())
|
|
378
|
+
.addMcpServer(BetaRequestMcpServerUrlDefinition.builder()
|
|
379
|
+
.name("my-server")
|
|
380
|
+
.url("https://example.com/mcp")
|
|
381
|
+
.build())
|
|
382
|
+
.addUserMessage("...")
|
|
383
|
+
.build();
|
|
384
|
+
|
|
385
|
+
client.beta().messages().create(params);
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
`BetaTool*` types are NOT interchangeable with non-beta `Tool*` — pick one namespace per request.
|
|
389
|
+
|
|
390
|
+
**Reading server-tool blocks in the response:** `ServerToolUseBlock` has `.id()`, `.name()` (enum), and `._input()` returning raw `JsonValue` — there is NO typed `.input()`. For code execution results, unwrap two levels:
|
|
391
|
+
|
|
392
|
+
```java
|
|
393
|
+
for (ContentBlock block : response.content()) {
|
|
394
|
+
block.serverToolUse().ifPresent(stu -> {
|
|
395
|
+
System.out.println("tool: " + stu.name() + " input: " + stu._input());
|
|
396
|
+
});
|
|
397
|
+
block.codeExecutionToolResult().ifPresent(r -> {
|
|
398
|
+
r.content().resultBlock().ifPresent(result -> {
|
|
399
|
+
System.out.println("stdout: " + result.stdout());
|
|
400
|
+
System.out.println("stderr: " + result.stderr());
|
|
401
|
+
System.out.println("exit: " + result.returnCode());
|
|
402
|
+
});
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
---
|
|
408
|
+
|
|
409
|
+
## Files API (Beta)
|
|
410
|
+
|
|
411
|
+
Under `client.beta().files()`. File references in messages need the beta message types (non-beta `DocumentBlockParam.Source` has no file-ID variant).
|
|
412
|
+
|
|
413
|
+
```java
|
|
414
|
+
import com.anthropic.models.beta.files.FileUploadParams;
|
|
415
|
+
import com.anthropic.models.beta.files.FileMetadata;
|
|
416
|
+
import com.anthropic.models.beta.messages.BetaRequestDocumentBlock;
|
|
417
|
+
import java.nio.file.Paths;
|
|
418
|
+
|
|
419
|
+
FileMetadata meta = client.beta().files().upload(
|
|
420
|
+
FileUploadParams.builder()
|
|
421
|
+
.file(Paths.get("/path/to/doc.pdf")) // or .file(InputStream) or .file(byte[])
|
|
422
|
+
.build());
|
|
423
|
+
|
|
424
|
+
// Reference in a beta message:
|
|
425
|
+
BetaRequestDocumentBlock doc = BetaRequestDocumentBlock.builder()
|
|
426
|
+
.fileSource(meta.id())
|
|
427
|
+
.build();
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
Other methods: `.list()`, `.delete(String fileId)`, `.download(String fileId)`, `.retrieveMetadata(String fileId)`.
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
# Claude API — PHP
|
|
2
|
+
|
|
3
|
+
> **Note:** The PHP SDK is the official Anthropic SDK for PHP. Tool runner and Agent SDK are not available. Bedrock, Vertex AI, and Foundry clients are supported.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
composer require "anthropic-ai/sdk"
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Client Initialization
|
|
12
|
+
|
|
13
|
+
```php
|
|
14
|
+
use Anthropic\Client;
|
|
15
|
+
|
|
16
|
+
// Using API key from environment variable
|
|
17
|
+
$client = new Client(apiKey: getenv("ANTHROPIC_API_KEY"));
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### Amazon Bedrock
|
|
21
|
+
|
|
22
|
+
```php
|
|
23
|
+
use Anthropic\Bedrock;
|
|
24
|
+
|
|
25
|
+
// Constructor is private — use the static factory. Reads AWS credentials from env.
|
|
26
|
+
$client = Bedrock\Client::fromEnvironment(region: 'us-east-1');
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Google Vertex AI
|
|
30
|
+
|
|
31
|
+
```php
|
|
32
|
+
use Anthropic\Vertex;
|
|
33
|
+
|
|
34
|
+
// Constructor is private. Parameter is `location`, not `region`.
|
|
35
|
+
$client = Vertex\Client::fromEnvironment(
|
|
36
|
+
location: 'us-east5',
|
|
37
|
+
projectId: 'my-project-id',
|
|
38
|
+
);
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Anthropic Foundry
|
|
42
|
+
|
|
43
|
+
```php
|
|
44
|
+
use Anthropic\Foundry;
|
|
45
|
+
|
|
46
|
+
// Constructor is private. baseUrl or resource is required.
|
|
47
|
+
$client = Foundry\Client::withCredentials(
|
|
48
|
+
authToken: getenv('ANTHROPIC_FOUNDRY_AUTH_TOKEN'),
|
|
49
|
+
baseUrl: 'https://<resource>.services.ai.azure.com/anthropic',
|
|
50
|
+
);
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Basic Message Request
|
|
56
|
+
|
|
57
|
+
```php
|
|
58
|
+
$message = $client->messages->create(
|
|
59
|
+
model: 'claude-opus-4-6',
|
|
60
|
+
maxTokens: 16000,
|
|
61
|
+
messages: [
|
|
62
|
+
['role' => 'user', 'content' => 'What is the capital of France?'],
|
|
63
|
+
],
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
// content is an array of polymorphic blocks (TextBlock, ToolUseBlock,
|
|
67
|
+
// ThinkingBlock). Accessing ->text on content[0] without checking the block
|
|
68
|
+
// type will throw if the first block is not a TextBlock (e.g., when extended
|
|
69
|
+
// thinking is enabled and a ThinkingBlock comes first). Always guard:
|
|
70
|
+
foreach ($message->content as $block) {
|
|
71
|
+
if ($block->type === 'text') {
|
|
72
|
+
echo $block->text;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
If you only want the first text block:
|
|
78
|
+
|
|
79
|
+
```php
|
|
80
|
+
foreach ($message->content as $block) {
|
|
81
|
+
if ($block->type === 'text') {
|
|
82
|
+
echo $block->text;
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Streaming
|
|
91
|
+
|
|
92
|
+
> **Requires SDK v0.5.0+.** v0.4.0 and earlier used a single `$params` array; calling with named parameters throws `Unknown named parameter $model`. Upgrade: `composer require "anthropic-ai/sdk:^0.6"`
|
|
93
|
+
|
|
94
|
+
```php
|
|
95
|
+
use Anthropic\Messages\RawContentBlockDeltaEvent;
|
|
96
|
+
use Anthropic\Messages\TextDelta;
|
|
97
|
+
|
|
98
|
+
$stream = $client->messages->createStream(
|
|
99
|
+
model: 'claude-opus-4-6',
|
|
100
|
+
maxTokens: 64000,
|
|
101
|
+
messages: [
|
|
102
|
+
['role' => 'user', 'content' => 'Write a haiku'],
|
|
103
|
+
],
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
foreach ($stream as $event) {
|
|
107
|
+
if ($event instanceof RawContentBlockDeltaEvent && $event->delta instanceof TextDelta) {
|
|
108
|
+
echo $event->delta->text;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Tool Use (Manual Loop)
|
|
116
|
+
|
|
117
|
+
Tools are passed as arrays. **The SDK uses camelCase keys** (`inputSchema`, `toolUseID`, `stopReason`) and auto-maps to the API's snake_case on the wire — since v0.5.0. See [shared tool use concepts](../shared/tool-use-concepts.md) for the loop pattern.
|
|
118
|
+
|
|
119
|
+
```php
|
|
120
|
+
use Anthropic\Messages\ToolUseBlock;
|
|
121
|
+
|
|
122
|
+
$tools = [
|
|
123
|
+
[
|
|
124
|
+
'name' => 'get_weather',
|
|
125
|
+
'description' => 'Get the current weather in a given location',
|
|
126
|
+
'inputSchema' => [ // camelCase, not input_schema
|
|
127
|
+
'type' => 'object',
|
|
128
|
+
'properties' => [
|
|
129
|
+
'location' => ['type' => 'string', 'description' => 'City and state'],
|
|
130
|
+
],
|
|
131
|
+
'required' => ['location'],
|
|
132
|
+
],
|
|
133
|
+
],
|
|
134
|
+
];
|
|
135
|
+
|
|
136
|
+
$messages = [['role' => 'user', 'content' => 'What is the weather in SF?']];
|
|
137
|
+
|
|
138
|
+
$response = $client->messages->create(
|
|
139
|
+
model: 'claude-opus-4-6',
|
|
140
|
+
maxTokens: 16000,
|
|
141
|
+
tools: $tools,
|
|
142
|
+
messages: $messages,
|
|
143
|
+
);
|
|
144
|
+
|
|
145
|
+
while ($response->stopReason === 'tool_use') { // camelCase property
|
|
146
|
+
$toolResults = [];
|
|
147
|
+
foreach ($response->content as $block) {
|
|
148
|
+
if ($block instanceof ToolUseBlock) {
|
|
149
|
+
// $block->name : string — tool name to dispatch on
|
|
150
|
+
// $block->input : array<string,mixed> — parsed JSON input
|
|
151
|
+
// $block->id : string — pass back as toolUseID
|
|
152
|
+
$result = executeYourTool($block->name, $block->input);
|
|
153
|
+
$toolResults[] = [
|
|
154
|
+
'type' => 'tool_result',
|
|
155
|
+
'toolUseID' => $block->id, // camelCase, not tool_use_id
|
|
156
|
+
'content' => $result,
|
|
157
|
+
];
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Append assistant turn + user turn with tool results
|
|
162
|
+
$messages[] = ['role' => 'assistant', 'content' => $response->content];
|
|
163
|
+
$messages[] = ['role' => 'user', 'content' => $toolResults];
|
|
164
|
+
|
|
165
|
+
$response = $client->messages->create(
|
|
166
|
+
model: 'claude-opus-4-6',
|
|
167
|
+
maxTokens: 16000,
|
|
168
|
+
tools: $tools,
|
|
169
|
+
messages: $messages,
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// Final text response
|
|
174
|
+
foreach ($response->content as $block) {
|
|
175
|
+
if ($block->type === 'text') {
|
|
176
|
+
echo $block->text;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
`$block->type === 'tool_use'` also works; `instanceof ToolUseBlock` narrows for PHPStan.
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Extended Thinking
|
|
187
|
+
|
|
188
|
+
**Adaptive thinking is the recommended mode for Claude 4.6+ models.** Claude decides dynamically when and how much to think.
|
|
189
|
+
|
|
190
|
+
```php
|
|
191
|
+
use Anthropic\Messages\ThinkingBlock;
|
|
192
|
+
|
|
193
|
+
$message = $client->messages->create(
|
|
194
|
+
model: 'claude-opus-4-6',
|
|
195
|
+
maxTokens: 16000,
|
|
196
|
+
thinking: ['type' => 'adaptive'],
|
|
197
|
+
messages: [
|
|
198
|
+
['role' => 'user', 'content' => 'Solve: 27 * 453'],
|
|
199
|
+
],
|
|
200
|
+
);
|
|
201
|
+
|
|
202
|
+
// ThinkingBlock(s) precede TextBlock in content
|
|
203
|
+
foreach ($message->content as $block) {
|
|
204
|
+
if ($block instanceof ThinkingBlock) {
|
|
205
|
+
echo "Thinking:\n{$block->thinking}\n\n";
|
|
206
|
+
// $block->signature is an opaque string — preserve verbatim if
|
|
207
|
+
// passing thinking blocks back in multi-turn conversations
|
|
208
|
+
} elseif ($block->type === 'text') {
|
|
209
|
+
echo "Answer: {$block->text}\n";
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
> **Deprecated:** `['type' => 'enabled', 'budgetTokens' => N]` (fixed-budget extended thinking) still works on Claude 4.6 but is deprecated. Use adaptive thinking above.
|
|
215
|
+
|
|
216
|
+
`$block->type === 'thinking'` also works for the check; `instanceof` narrows for PHPStan.
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## Beta Features & Server-Side Tools
|
|
221
|
+
|
|
222
|
+
**`betas:` is NOT a param on `$client->messages->create()`** — it only exists on the beta namespace. Use it for features that need an explicit opt-in header:
|
|
223
|
+
|
|
224
|
+
```php
|
|
225
|
+
use Anthropic\Beta\Messages\BetaRequestMCPServerURLDefinition;
|
|
226
|
+
|
|
227
|
+
$response = $client->beta->messages->create(
|
|
228
|
+
model: 'claude-opus-4-6',
|
|
229
|
+
maxTokens: 16000,
|
|
230
|
+
mcpServers: [
|
|
231
|
+
BetaRequestMCPServerURLDefinition::with(
|
|
232
|
+
name: 'my-server',
|
|
233
|
+
url: 'https://example.com/mcp',
|
|
234
|
+
),
|
|
235
|
+
],
|
|
236
|
+
betas: ['mcp-client-2025-11-20'], // only valid on ->beta->messages
|
|
237
|
+
messages: [['role' => 'user', 'content' => 'Use the MCP tools']],
|
|
238
|
+
);
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
**Server-side tools** (bash, web_search, text_editor, code_execution) are GA and work on both paths — `Anthropic\Messages\ToolBash20250124` / `WebSearchTool20260209` / `ToolTextEditor20250728` / `CodeExecutionTool20260120` for non-beta, `Anthropic\Beta\Messages\BetaToolBash20250124` / `BetaWebSearchTool20260209` / `BetaToolTextEditor20250728` / `BetaCodeExecutionTool20260120` for beta. No `betas:` header needed for these.
|