How this skill is triggered — by the user, by Claude, or both
Slash command
/form-filler:form-fillingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
| name | description |
| name | description |
|---|---|
| form-filling | Fill out agriculture-related forms using FarmAdvisor data. Guides the user through organization selection, property selection, and form source selection before filling. Trigger with "fill out this form", "help me complete this form", "fill this in with my farm data", or the /form-filler command. |
A guided, step-by-step process to fill agriculture-related PDF forms using data from FarmAdvisor.
CRITICAL RULES — read before doing anything:
- Do NOT write your own code to read or fill PDFs. A bundled script is provided at
${CLAUDE_PLUGIN_ROOT}/scripts/fill_pdf.py— use it exclusively.- Use the FarmAdvisor MCP server tools directly to execute GraphQL queries. The MCP server is already connected — use its
executetool.- This is an interactive flow. Complete each step, present the results to the user, and wait for their response before moving to the next step. Do not skip ahead.
- Return the filled PDF file to the user. Do not just present text.
Use the FarmAdvisor MCP server's execute tool to run this query:
{
profile: myUserContext {
user {
id
firstName
lastName
fullName
emailAddress
uto: userToOrganizations(orderBy: ORGANIZATION_BY_ORGANIZATION_ID__NAME_ASC) {
nodes {
organization {
id
name
rootOrganization {
id
}
}
isDefault
isAdmin
isGuest
}
}
}
}
}
Present the results to the user:
isDefault is true, but ask the user to confirm or switch. Wait for their response.Use the FarmAdvisor MCP server's execute tool to run this query, substituting the selected organization's id:
query GetProperties($orgId: String, $excludeDisabled: Boolean) {
properties(
filter: {
organization: {
hierarchy: {
includes: $orgId
}
}
disabledAt: { isNull: $excludeDisabled }
}
orderBy: [NAME_ASC]
) {
nodes {
id
name
boundingBox
organization {
id
name
}
ncreifRegion {
region
}
usdaRegion {
region
}
centroid {
geojson
}
surveyBoundary {
geojson
}
grossAcres
location
disabledAt
}
}
}
Variables: $orgId = selected organization ID, $excludeDisabled = true
Present the results to the user:
Ask the user how they want to provide the form:
How would you like to provide the form to fill?
- Upload a file — Upload your own PDF form
- Use a file from FarmAdvisor — Choose from files stored in your organization or property
Wait for the user's response.
If the user chooses to upload, ask them to upload their PDF. Once uploaded, proceed to Step 4.
Query available files from both the organization and the selected property.
Organization PDF templates:
query GetOrgTemplates($orgId: String!) {
organization(id: $orgId) {
pdfTemplate {
templateFiles {
key
name
url
}
}
}
}
Organization files (PDFs only — filter by name containing .pdf):
query GetOrgFiles($orgId: String!) {
organization(id: $orgId) {
organizationFiles(
filter: {
isFolder: { equalTo: false }
name: { includesInsensitive: ".pdf" }
}
orderBy: [NAME_ASC]
) {
nodes {
key
name
presignedUrl
createdAt
}
}
}
}
Property files (PDFs only):
query GetPropertyFiles($propertyId: BigInt!) {
property(id: $propertyId) {
propertyFiles(
filter: {
isFolder: { equalTo: false }
name: { includesInsensitive: ".pdf" }
}
orderBy: [NAME_ASC]
) {
nodes {
key
name
presignedUrl
createdAt
}
}
}
}
Present all available files to the user, grouped by source:
pdfTemplate.templateFiles)organizationFiles)propertyFiles)Ask the user to pick one. Wait for their response.
Once selected, download the file using its presignedUrl (or url for templates):
curl -sL -o /tmp/form.pdf "<presigned_url>"
Proceed to Step 4 with the downloaded file.
python "${CLAUDE_PLUGIN_ROOT}/scripts/fill_pdf.py" --list-fields /path/to/form.pdf
This outputs a JSON list of all fillable AcroForm fields with their names, types, and current values.
Look at the PDF visually to understand what each field represents, then match AcroForm field names to FarmAdvisor data.
Common field mappings:
| Form Field | FarmAdvisor Source |
|---|---|
| Farm/Property Name | property.name |
| Organization Name | property.organization.name |
| Location / Address | property.location |
| Total Acres / Gross Acres | property.grossAcres |
| USDA Region | property.usdaRegion.region |
| NCREIF Region | property.ncreifRegion.region |
| GPS Coordinates | property.centroid.geojson |
| Farm Boundary | property.surveyBoundary.geojson |
Build a JSON mapping of { "fieldName": "value" } and run:
python "${CLAUDE_PLUGIN_ROOT}/scripts/fill_pdf.py" --fill /path/to/form.pdf /path/to/filled_form.pdf --data '{"FieldName1": "value1", "FieldName2": "value2"}'
For large mappings, write the JSON to a file first:
python "${CLAUDE_PLUGIN_ROOT}/scripts/fill_pdf.py" --fill /path/to/form.pdf /path/to/filled_form.pdf --data-file /tmp/mappings.json
Give the user the filled PDF file. Tell them:
Ask the user to review the filled form for accuracy.
search and introspect tools to discover available fields, then execute to query them.npx claudepluginhub fact-ag/farmadvisor_claude_plugins --plugin form-fillerAssists with negotiating transmission line, pipeline, or drainage easements on agricultural land, including impact assessment and compensation design.
Fill web forms by fetching form fields from a URL, searching the user's local knowledge base for relevant info, and generating a pre-filled markdown document. Useful for conference applications, speaker submissions, event registrations, and profile forms.
Prepares federal and state tax returns by extracting data from source documents, computing taxes, and filling official PDF forms.