OpenSkagit
OpenSkagit public data

Explore Skagit County
public records.

OpenSkagit gives your AI assistant read-only tools for properties, taxes, zoning, water, public budgets, and local land-use questions.

Try a question

“What can I learn about this property, its taxes, and the zoning around it?”

“Which public records help me understand whether this land-use idea needs more review?”

Public tools
56
Coverage
Skagit County
Use
Research & screening
Source-aware resultsReviewed accessRaw codes + readable labelsScreening, not legal advice

Tool catalog

56 focused tools, one coherent system.

The catalog is generated from the same versioned registry used by the MCP server, so public documentation and agent discovery stay aligned. Each entry shows its source family, accepted inputs, answer shape, and known caveats. Examples are illustrative, not a live property lookup.

01

Parcel & assessor

10 tools
parcel_get_summaryExplore this tool +

Get current assessor details from the local OpenSkagit parcel snapshot for one Skagit parcel.

beta · read only
Inputs
parcel_id
Returns
data, sources, freshness, warnings, errors
Max rows
1
Illustrative answer shape{"parcel_number": "P12345", "situs_address": "123 Example Road", "assessed_value": 485000, "tax_year": 2026}
parcel_get_historyExplore this tool +

Get imported year-over-year assessment history for one parcel.

beta · read only
Inputs
parcel_id
Returns
data, sources, freshness, warnings, errors
Max rows
50
parcel_get_salesExplore this tool +

Get imported transfer and sale history for one parcel.

beta · read only
Inputs
parcel_id
Returns
data, sources, freshness, warnings, errors
Max rows
50
Illustrative answer shape{"sales": [{"sale_date": "2024-06-14", "sale_price": 462000, "qualification": "reviewed"}]}
parcel_find_comparable_salesExplore this tool +

Find explainable local comparable-sale candidates for one active Skagit parcel.

beta · read only
Inputs
parcel_id, limit, sale_months, cohort, show_all_neighborhood
Returns
data, sources, freshness, warnings, errors
Max rows
25
Illustrative answer shape{"comparables": [{"parcel_number": "P67890", "sale_price": 475000, "distance_miles": 1.2}]}
parcel_get_landExplore this tool +

Get the imported assessor land-segment breakdown for one parcel.

beta · read only
Inputs
parcel_id
Returns
data, sources, freshness, warnings, errors
Max rows
50
parcel_get_improvementsExplore this tool +

Get imported building and improvement details for one parcel.

beta · read only
Inputs
parcel_id
Returns
data, sources, freshness, warnings, errors
Max rows
50
parcel_get_permitsExplore this tool +

Get live assessor-linked permit history for one parcel.

beta · read only
Inputs
parcel_id
Returns
data, sources, freshness, warnings, errors
Max rows
50
parcel_get_tax_detailExplore this tool +

Get detailed imported tax-statement data for one parcel and optional year.

beta · read only
Inputs
parcel_id, year
Returns
data, sources, freshness, warnings, errors
Max rows
100
parcel_get_full_reportExplore this tool +

Get a combined local parcel report with details, history, sales, land, and improvements.

beta · read only
Inputs
parcel_id
Returns
data, sources, freshness, warnings, errors
Max rows
100
02

GIS & overlays

4 tools
gis_list_layersExplore this tool +

List registered GIS layers and bundles.

beta · read only
Returns
data, sources, freshness, warnings, errors
Max rows
100
gis_get_layer_metadataExplore this tool +

Get live ArcGIS metadata for a registered layer.

beta · read only
Inputs
layer
Returns
data, sources, freshness, warnings, errors
Max rows
1
gis_get_parcelExplore this tool +

Get the county GIS parcel feature and optional geometry.

beta · read only
Inputs
parcel_id, include_geometry
Returns
data, sources, freshness, warnings, errors
Max rows
1
gis_get_overlaysExplore this tool +

Query selected GIS overlays intersecting one parcel.

beta · read only
Inputs
parcel_id, bundles, layers, include_parcel_geometry
Returns
data, sources, freshness, warnings, errors
Max rows
50
03

Water & buildability

1 tools
water_determine_rightsExplore this tool +

Screen a Skagit parcel for residential water-supply pathways, mapped water-right evidence, and basin constraints.

beta · read only
Inputs
parcel_id
Returns
parcel, overall_status, confidence, summary, pathways, evidence, legal_rules, next_steps, limitations
Max rows
25

Try asking: Determine the residential water-supply pathways and constraints for parcel P96023.

Illustrative answer shape{"overall_status": "conditional_or_review", "summary": "A mapped water pathway may exist, but current agency confirmation is required.", "pathways": [{"pathway": "permit_exempt_well", "status": "conditional_review"}], "legal_rules": [{"rule_id": "RCW-19.27.097", "citation": "Washington adequate-water-supply rule"}]}

Good to know: Residential screening only; not a water-right adjudication, permit decision, legal opinion, engineering report, or guarantee of buildability. Ecology and county map records may be incomplete, approximate, stale, or unmapped. A public-water service-area match does not replace a current service or water-availability letter.

04

Zoning & feasibility

9 tools
zoning_resolve_parcelExplore this tool +

Resolve a parcel ID or address to jurisdiction and zoning context.

beta · read only
Inputs
parcel_id, address
Returns
data, sources, freshness, warnings, errors
Max rows
1
Illustrative answer shape{"parcel_number": "P12345", "jurisdiction": "Mount Vernon", "zone": "R-4", "source_citation": "city code"}
zoning_get_profileExplore this tool +

Get a structured profile for one jurisdiction and zone.

beta · read only
Inputs
jurisdiction, zone_code
Returns
data, sources, freshness, warnings, errors
Max rows
1
zoning_lookup_useExplore this tool +

Look up the status of a proposed use in one zone.

beta · read only
Inputs
jurisdiction, zone_code, proposed_use
Returns
data, sources, freshness, warnings, errors
Max rows
1
zoning_list_allowed_usesExplore this tool +

List structured allowed uses for one zone.

beta · read only
Inputs
jurisdiction, zone_code, status_filter
Returns
data, sources, freshness, warnings, errors
Max rows
100
zoning_search_codeExplore this tool +

Search imported zoning source text with citations and bounded offset pagination.

beta · read only
Inputs
jurisdiction, query, limit, offset
Returns
data, sources, freshness, warnings, errors
Max rows
25
zoning_get_standardsExplore this tool +

Get structured development standards for one zone.

beta · read only
Inputs
jurisdiction, zone_code
Returns
data, sources, freshness, warnings, errors
Max rows
1
zoning_get_overlaysExplore this tool +

Get zoning-related overlays and constraints for one parcel.

beta · read only
Inputs
parcel_id
Returns
data, sources, freshness, warnings, errors
Max rows
100
zoning_build_feasibilityExplore this tool +

Build a cited screening report for a parcel and proposed use.

beta · read only
Inputs
parcel_id, proposed_use
Returns
data, sources, freshness, warnings, errors
Max rows
1
Illustrative answer shape{"screening": "review needed", "signals": ["parcel is in a reviewed residential zone"], "caveats": ["not a permit or entitlement decision"]}
zoning_compare_zonesExplore this tool +

Compare zones for a proposed use across optional jurisdictions.

beta · read only
Inputs
proposed_use, jurisdictions
Returns
data, sources, freshness, warnings, errors
Max rows
25
05

Public budgets

6 tools
budget_list_jurisdictionsExplore this tool +

List jurisdictions and fiscal years with reviewed public budget data.

beta · read only
Returns
data, sources, freshness, warnings, errors
Max rows
100
budget_get_summaryExplore this tool +

Get reviewed revenue, expenditure, and fund-balance totals from an official budget.

beta · read only
Inputs
jurisdiction, year
Returns
data, sources, freshness, warnings, errors
Max rows
1
Illustrative answer shape{"jurisdiction": "Mount Vernon", "fiscal_year": 2026, "revenues": 84500000, "expenditures": 82100000}
budget_get_breakdownExplore this tool +

Group reviewed budget amounts by fund, department, or account.

beta · read only
Inputs
jurisdiction, year, side, group_by, limit
Returns
data, sources, freshness, warnings, errors
Max rows
100
budget_get_trendExplore this tool +

Get a multi-year reviewed budget trend for one jurisdiction.

beta · read only
Inputs
jurisdiction, side
Returns
data, sources, freshness, warnings, errors
Max rows
25
budget_compare_jurisdictionsExplore this tool +

Compare reviewed totals across up to twelve jurisdictions.

beta · read only
Inputs
jurisdictions, year, side
Returns
data, sources, freshness, warnings, errors
Max rows
12
budget_search_documentsExplore this tool +

Search official budget PDF text with page-numbered evidence and bounded offset pagination.

beta · read only
Inputs
jurisdiction, query, year, limit, offset
Returns
data, sources, freshness, warnings, errors
Max rows
25
06

Source health

4 tools
data_list_sourcesExplore this tool +

List public source contracts, coverage, refresh expectations, and current status.

stable · read only
Returns
source identity, coverage, attribution, refresh, status, limitations
Max rows
50

Try asking: List the public OpenSkagit sources.

Good to know: Statuses are aggregate and never include credentials or parcel payloads.

data_get_source_statusExplore this tool +

Get aggregate freshness, quality, failure, and fallback status for one public source.

stable · read only
Inputs
source_id
Returns
status, attempted_at, succeeded_at, effective_at, verified_at, quality, failure
Max rows
1

Try asking: Get status for source "openskagit_postgis".

Good to know: Only registered public source IDs are accepted.

data_get_freshnessExplore this tool +

Summarize source and domain freshness for the public MCP catalog.

stable · read only
Inputs
domain (optional)
Returns
served_at, source statuses, domain statuses
Max rows
50

Try asking: Check freshness for domain "tax".

Illustrative answer shape{"domains": {"parcel": {"status": "fresh"}, "tax": {"status": "unknown"}}, "sources": []}

Good to know: Unknown status means no verified status record is available; it is not proof of freshness.

data_get_latest_assessor_syncExplore this tool +

Return the latest aggregate assessor sync status without record-level payloads or controls.

stable · read only
Returns
run status, started_at, finished_at, sanitized counts, failure presence
Max rows
1

Try asking: Get the latest assessor sync status.

Good to know: This is status only; it cannot start, stop, or inspect individual sync records.

07

Opportunity screening

4 tools
opportunity_list_screen_typesExplore this tool +

List the deterministic public opportunity screens and their screening criteria.

stable · read only
Returns
screen_type, label, criteria, limitations
Max rows
4

Try asking: List the public opportunity screen types.

Good to know: Screening signals are not legal, entitlement, appraisal, or feasibility determinations.

opportunity_get_parcel_signalsExplore this tool +

Get public opportunity signals for one parcel without owner or mailing identity.

beta · read only
Inputs
parcel_number
Returns
parcel facts, land/building signals, zoning, utility signals, risk_flags
Max rows
1

Try asking: Get opportunity signals for parcel "P12345".

Good to know: The response is a screening profile, not a development determination.

opportunity_explain_matchExplore this tool +

Explain why a parcel matched a named deterministic opportunity screen.

beta · read only
Inputs
screen_type, parcel_number, filters (optional)
Returns
matched, criteria, matching_signals, risk_flags, caveats
Max rows
1

Try asking: Explain a vacant-buildable-lots match for parcel "P12345".

Good to know: Only public screen types are available; no arbitrary SQL or natural-language query is accepted.

08

Tax & assessment

4 tools
tax_get_parcel_summaryExplore this tool +

Get a public tax and assessed-value summary for one active parcel.

stable · read only
Inputs
parcel_number
Returns
parcel location, tax year, assessed/taxable values, total taxes, levy code
Max rows
1

Try asking: Get the tax summary for parcel "P12345".

Good to know: Owner and mailing identity fields are excluded.

tax_get_parcel_trendExplore this tool +

Get a bounded year-over-year assessed-value and tax trend for one parcel.

beta · read only
Inputs
parcel_number
Returns
tax year, total value, tax amount, land/building values
Max rows
20

Try asking: Show the tax trend for parcel "P12345".

Illustrative answer shape{"history": [{"tax_year": 2024, "assessed_value": 440000, "total_tax": 5600}, {"tax_year": 2025, "assessed_value": 465000, "total_tax": 5900}]}

Good to know: Only published positive history rows are returned; missing years are not inferred.

tax_get_levy_breakdownExplore this tool +

Get the reviewed levy and agency rows contributing to one parcel tax bill.

beta · read only
Inputs
parcel_number, tax_year (optional)
Returns
agency, levy code, total tax, share of bill, reporting status
Max rows
100

Try asking: Break down the 2025 levy bill for parcel "P12345".

Illustrative answer shape{"tax_year": 2025, "rows": [{"agency": "County", "share_of_bill": 0.31}, {"agency": "School district", "share_of_bill": 0.48}]}

Good to know: Rows reflect the published tax-summary view and may be incomplete for unpublished years.

tax_get_delinquency_statusExplore this tool +

Return a freshness-gated public delinquency status for one parcel.

beta · read only
Inputs
parcel_number
Returns
available, status, tax year, due signals, source timestamp
Max rows
1

Try asking: Check current delinquency status for parcel "P12345".

Good to know: Stale source data is reported as unavailable rather than presented as current.

09

Land Ledger scenarios

2 tools
land_ledger_get_parcelExplore this tool +

Get one bounded Land Ledger scenario record for a parcel in a configured jurisdiction.

beta · read only
Inputs
city_slug, parcel_number
Returns
jurisdiction, zone, land signals, allowed scenarios, scenario results, assumptions
Max rows
1

Try asking: Get the Land Ledger record for "sedro-woolley" and parcel "P12345".

Illustrative answer shape{"jurisdiction": "sedro-woolley", "parcel_number": "P12345", "scenarios": [{"name": "retain", "status": "screened"}]}

Good to know: Land Ledger is a scenario model; coverage depends on a completed jurisdiction rebuild.

land_ledger_get_jurisdiction_summaryExplore this tool +

Get a Land Ledger jurisdiction summary with coverage, assumptions, and rebuild timestamp.

beta · read only
Inputs
city_slug
Returns
parcel coverage, opportunity totals, scenario definitions, diagnostics, rebuilt_at
Max rows
1

Try asking: Summarize the Land Ledger for "sedro-woolley".

Good to know: Only materialized jurisdictions are available; model outputs are not forecasts or guarantees.

010

Elections & civic results

6 tools
voting_list_electionsExplore this tool +

List imported Skagit elections, contest counts, source freshness, and available geographic detail.

beta · read only
Inputs
start_year (optional), end_year (optional), election_type (optional), limit (maximum 100)
Returns
elections, date range, contest counts, source coverage, freshness
Max rows
100

Try asking: List Skagit general elections available since 2018.

Illustrative answer shape{"elections": [{"election_date": "2024-11-05", "name": "November 5, 2024 General Election", "election_type": "general", "status": "official"}]}

Good to know: Coverage reflects successfully imported official source releases; missing years are not inferred.

voting_get_resultsExplore this tool +

Retrieve bounded aggregate county or reporting-precinct results for an imported Skagit election.

beta · read only
Inputs
election_date (optional), contest (optional), geography (county or precinct), area (optional), limit (maximum 100)
Returns
contest, candidate/measure option, votes, percentage, denominator, source documents, certification status
Max rows
100

Try asking: Show the 2024 Skagit County results for the governor contest.

Illustrative answer shape{"results": [{"contest": "Skagit Commissioner District 1", "option": "Candidate", "votes": 38669, "percentage": 62.5813, "denominator": 61790}]}

Good to know: Precinct results are official reporting geographies and may be consolidated or boundary-incompatible across years. Undervotes and overvotes are returned only when present in a verified source export.

voting_get_candidate_historyExplore this tool +

Find a candidate-name match across imported aggregate Skagit election results.

beta · read only
Inputs
candidate, limit (maximum 100)
Returns
election history, contest, ballot-listed party preference, votes, percentage, sources
Max rows
100

Try asking: What is this candidate's Skagit election history?

Illustrative answer shape{"history": [{"election_date": "2025-11-04", "contest": "Skagit Commissioner District 1", "candidate": "Candidate", "votes": 38669, "percentage": 62.5813}]}

Good to know: A n a m e m a t c h i s n o t i d e n t i t y r e s o l u t i o n a n d p a r t y p r e f e r e n c e i s t h e c a n d i d a t e ' s b a l l o t l a b e l , n o t v o t e r a f f i l i a t i o n .

voting_get_measure_historyExplore this tool +

Retrieve the imported history and official-result comparison for matching Skagit ballot measures.

beta · read only
Inputs
measure, limit (maximum 100)
Returns
measure contests, responses, votes, percentage, outcome, sources
Max rows
100

Try asking: How have school levies and bonds performed over time?

Illustrative answer shape{"history": [{"measure": "Proposition No. 1", "outcome": "passed", "responses": [{"label": "Approved", "percentage": 80.03}]}]}

Good to know: P a s s a g e i s r e p o r t e d f r o m t h e o f f i c i a l r e s u l t c o m p a r i s o n w h e n p o s s i b l e ; c o n t e s t - s p e c i f i c r u l e s a r e n o t i n f e r r e d .

voting_compare_electionsExplore this tool +

Compare compatible imported election contests by county or shared reporting-precinct labels.

beta · read only
Inputs
first_date, second_date, contest, geography, area (optional), limit (maximum 100)
Returns
first/second votes, first/second percentages, percentage-point change, comparability warnings, sources
Max rows
100

Try asking: How has turnout changed in Sedro-Woolley across comparable general elections?

Illustrative answer shape{"results": [{"geography": "Skagit County", "option": "Candidate", "percentage_point_change": 2.14, "comparable": true}]}

Good to know: C o m p a r i s o n s d o n o t a t t r i b u t e g e o g r a p h i c c h a n g e s t o i n d i v i d u a l v o t e r s a n d a r e l i m i t e d b y r e n a m e d o r r e d r a w n r e p o r t i n g g e o g r a p h i e s .

voting_find_patternsExplore this tool +

Find bounded aggregate election patterns such as closest races, turnout changes, repeat measures, or precinct differences.

beta · read only
Inputs
pattern, first_date (for precinct differences), second_date (for precinct differences), contest (for precinct differences), limit (maximum 100)
Returns
ranked pattern rows, transparent method, coverage, limitations
Max rows
100

Try asking: Which Skagit local races had the closest margins?

Illustrative answer shape{"pattern": "closest_races", "results": [{"contest": "Local race", "margin_percentage_points": 0.42}]}

Good to know: O n l y p a t t e r n s s u p p o r t e d b y i m p o r t e d a g g r e g a t e o b s e r v a t i o n s a r e r e t u r n e d ; n o v o t e r - l e v e l i n f e r e n c e i s p e r f o r m e d .

011

Visual

6 tools
generate_mapExplore this tool +

Generate a static editorial map using available property and geographic data.

beta · read only
Inputs
property_ids, subject_property_id, latitude, longitude, mode, aspect_ratio, title, subtitle, highlighted_properties, annotation, presentation_mode
Returns
data, sources, freshness, warnings, errors
generate_property_cardExplore this tool +

Generate a polished property summary graphic from authoritative parcel data.

beta · read only
Inputs
property_id, mode, aspect_ratio, title, subtitle, highlight_fields, requested_fields, identity_mode, presentation_mode
Returns
data, sources, freshness, warnings, errors
generate_comparisonExplore this tool +

Generate a visual comparison of two to four properties and selected fields.

beta · read only
Inputs
subject_property_id, comparison_property_ids, requested_fields, aspect_ratio, title, subtitle, highlight_fields, custom_labels, presentation_mode
Returns
data, sources, freshness, warnings, errors
generate_infographicExplore this tool +

Generate a simple, data-faithful infographic from supplied or property-backed values.

beta · read only
Inputs
infographic_type, title, values, labels, subtitle, units, aspect_ratio, highlighted_items, annotation, property_ids, source_references, presentation_mode, target_width, target_height
Returns
data, sources, freshness, warnings, errors
generate_context_mediaExplore this tool +

Generate a generic public-safe contextual property illustration for an approved story beat.

beta · read only
Inputs
description, aspect_ratio, visual_style, public_safe, title, target_width, target_height, presentation_mode
Returns
data, sources, freshness, warnings, errors
generate_concept_animationExplore this tool +

Generate a deterministic schematic concept visual for a directed video beat.

beta · read only
Inputs
concept_type, title, values, labels, aspect_ratio, fact_ids, target_width, target_height, presentation_mode
Returns
data, sources, freshness, warnings, errors

Get your access link

Add OpenSkagit to your AI assistant.

Submit the short form and we’ll create a private, read-only link for the public tools. Paste that link into a compatible remote MCP connector in ChatGPT, Codex, Claude, or another client.

  • One private link for your use
  • Read-only public-record tools
  • Usage tracked to your link
  • Links can be revoked
Use with judgment.

OpenSkagit organizes public information for research and screening. Outputs may be incomplete or stale and are not legal, permitting, engineering, appraisal, or entitlement determinations. Verify consequential decisions with the originating public agency.