Find, compare, and rank NYC neighborhoods and schools, plus how NYC school admissions works.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Find NYC schools citywide by what a family wants — borough, community school district (1-32), grade band (pre-K/elementary/middle/high), school type (public/charter/private), admissions method (zoned, screened, unscreened, limited unscreened, ed-opt, audition, SHSAT, charter lottery, private, universal pre-K), and program focus (arts, sports, STEM, language, academic, clubs). Use this when the family describes the KIND of school they want; use get-schools when you already have an nta_code and want everything in that neighborhood. For what the filters can't say — a program or approach like 'Spanish dual language', 'Montessori' or 'a strong music program' — pass the family's words as query: results come best match first, each with the line it matched on (match_reason). Pass only the filters actually stated — at least one (a query counts) is required, and an invented one returns nothing. Program focus is tagged on public and charter schools only. Each school carries its Motley ratings out of 100 (ratings_note says how each is built), and url opens the same browse on motley.nyc. New York City only: for schools in any other city, don't call this; say Motley NYC covers New York City.
Max schools to return
The family's own words for what they want that the filters can't say — a program or approach ('Spanish dual language', 'Montessori', 'strong music program', 'robotics'). Ranks the matches best first, each with the line it matched on (match_reason). Leave out anything you pass as a filter, and never use it for a school's name (find-school) or for ratings.
Number of schools to skip, for paging
Limit to one borough. Omit unless the family named one.
Community school district numbers, 1-32. A borough is NOT a district — for 'schools in the Bronx' use `borough` and omit this. Never guess one.
School type. Omit unless the family named one.
prek (K-12 schools that also run 3-K/pre-K), elementary (K-5), middle (6-8), high (9-12)
How the school admits students; matches a school admitting by ANY listed method. Call get-admissions-methods or explain-admissions-method for what each one means.
Program focus; matches a school offering ANY listed focus. 'arts' covers art, music, dance, drama and theater; 'extracurricular' means clubs. Tagged on public and charter schools ONLY.
Tool list last changed Oct 25, 2026.
Find NYC schools citywide by what a family wants — borough, community school district (1-32), grade band (pre-K/elementary/middle/high), school type (public/charter/private), admissions method (zoned, screened, unscreened, limited unscreened, ed-opt, audition, SHSAT, charter lottery, private, universal pre-K), and program focus (arts, sports, STEM, language, academic, clubs). Use this when the family describes the KIND of school they want; use get-schools when you already have an nta_code and want everything in that neighborhood. For what the filters can't say — a program or approach like 'Spanish dual language', 'Montessori' or 'a strong music program' — pass the family's words as query: results come best match first, each with the line it matched on (match_reason). Pass only the filters actually stated — at least one (a query counts) is required, and an invented one returns nothing. Program focus is tagged on public and charter schools only. Each school carries its Motley ratings out of 100 (ratings_note says how each is built), and url opens the same browse on motley.nyc. New York City only: for schools in any other city, don't call this; say Motley NYC covers New York City.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max schools to return |
| query | string | The family's own words for what they want that the filters can't say — a program or approach ('Spanish dual language', 'Montessori', 'strong music program', 'robotics'). Ranks the matches best first, each with the line it matched on (match_reason). Leave out anything you pass as a filter, and never use it for a school's name (find-school) or for ratings. |
| offset | integer | Number of schools to skip, for paging |
| borough | string | Limit to one borough. Omit unless the family named one. |
| district | array | Community school district numbers, 1-32. A borough is NOT a district — for 'schools in the Bronx' use `borough` and omit this. Never guess one. |
| governance | array | School type. Omit unless the family named one. |
| grade_band | string | prek (K-12 schools that also run 3-K/pre-K), elementary (K-5), middle (6-8), high (9-12) |
| admissions_method | array | How the school admits students; matches a school admitting by ANY listed method. Call get-admissions-methods or explain-admissions-method for what each one means. |
| program_categories | array | Program focus; matches a school offering ANY listed focus. 'arts' covers art, music, dance, drama and theater; 'extracurricular' means clubs. Tagged on public and charter schools ONLY. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Max schools to return"
},
"query": {
"type": "string",
"maxLength": 120,
"minLength": 3,
"description": "The family's own words for what they want that the filters can't say — a program or approach ('Spanish dual language', 'Montessori', 'strong music program', 'robotics'). Ranks the matches best first, each with the line it matched on (match_reason). Leave out anything you pass as a filter, and never use it for a school's name (find-school) or for ratings."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 200,
"minimum": 0,
"description": "Number of schools to skip, for paging"
},
"borough": {
"enum": [
"Manhattan",
"Brooklyn",
"Queens",
"Bronx",
"Staten Island"
],
"type": "string",
"description": "Limit to one borough. Omit unless the family named one."
},
"district": {
"type": "array",
"items": {
"type": "integer",
"maximum": 32,
"minimum": 1
},
"maxItems": 8,
"minItems": 1,
"description": "Community school district numbers, 1-32. A borough is NOT a district — for 'schools in the Bronx' use `borough` and omit this. Never guess one."
},
"governance": {
"type": "array",
"items": {
"enum": [
"public",
"charter",
"private"
],
"type": "string"
},
"maxItems": 3,
"minItems": 1,
"description": "School type. Omit unless the family named one."
},
"grade_band": {
"enum": [
"prek",
"elementary",
"middle",
"high"
],
"type": "string",
"description": "prek (K-12 schools that also run 3-K/pre-K), elementary (K-5), middle (6-8), high (9-12)"
},
"admissions_method": {
"type": "array",
"items": {
"enum": [
"zoned",
"unscreened",
"limited_unscreened",
"screened",
"ed_opt",
"audition",
"shsat",
"charter_lottery",
"private_admissions",
"prek_universal"
],
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"description": "How the school admits students; matches a school admitting by ANY listed method. Call get-admissions-methods or explain-admissions-method for what each one means."
},
"program_categories": {
"type": "array",
"items": {
"enum": [
"academic",
"arts",
"sports",
"stem",
"language",
"extracurricular"
],
"type": "string"
},
"maxItems": 6,
"minItems": 1,
"description": "Program focus; matches a school offering ANY listed focus. 'arts' covers art, music, dance, drama and theater; 'extracurricular' means clubs. Tagged on public and charter schools ONLY."
}
},
"additionalProperties": false
}Compare 2–6 NYC neighborhoods side by side across the 9 family-fit metrics (Family Fit, Families, Affordability, Schools, Neighborhood Character, Transit, Safety, Health, Activities). Pass an array of NTA codes; returns a per-metric matrix with each neighborhood's band and the per-metric leader, plus weekday-morning transit minutes from each to the city's main job centers. Non-residential areas aren't scored and are dropped.
| Argument | Type | Description |
|---|---|---|
| nta_codes* | array | 2–6 NTA codes to compare side by side (from search-neighborhoods). Unknown and unscored codes (non-residential areas) are dropped. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"nta_codes"
],
"properties": {
"nta_codes": {
"type": "array",
"items": {
"type": "string",
"maxLength": 6
},
"maxItems": 6,
"minItems": 2,
"description": "2–6 NTA codes to compare side by side (from search-neighborhoods). Unknown and unscored codes (non-residential areas) are dropped."
}
},
"additionalProperties": false
}Explain one NYC admission entry point or method in full — the plain-English explainer, its typical deadline window, and, when the method asks a family for more than a ranked application, exactly what it requires (audition or portfolio, SHSAT registration, a demonstrated-interest sign-in, a private school's own test/interview track) plus the extra paperwork that comes with it. Pass a method key (shsat, audition, screened, ed_opt, limited_unscreened, unscreened, zoned, charter_lottery, private_admissions, prek_universal) or an early entry point (three-k, pre-k, kindergarten, gifted-talented).
| Argument | Type | Description |
|---|---|---|
| method* | string | An admission method key (shsat, audition, screened, ed_opt, limited_unscreened, unscreened, zoned, charter_lottery, private_admissions, prek_universal) OR an early entry point (three-k, pre-k, kindergarten, gifted-talented). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"method"
],
"properties": {
"method": {
"type": "string",
"description": "An admission method key (shsat, audition, screened, ed_opt, limited_unscreened, unscreened, zoned, charter_lottery, private_admissions, prek_universal) OR an early entry point (three-k, pre-k, kindergarten, gifted-talented)."
}
},
"additionalProperties": false
}Use this when a family asks how one of Motley's scores is computed — a neighborhood score (Family Fit, Schools, Safety / Peace of Mind, Affordability, Getting Around, Neighborhood Character, Air & Child Health, Things to Do) or the school rating — or whether the scores are biased toward wealthier areas. Returns what the score measures, its inputs and weights, how they combine, its share of Family Fit, its known limits, its sources, and how it moves with neighborhood income (Spearman's ρ with median household income). Relay the income figure plainly; don't reassure past it.
| Argument | Type | Description |
|---|---|---|
| topic* | string | The score or topic in the family's words: 'safety', 'family fit', 'school rating', 'schools', 'affordability', 'getting around', 'character', 'air quality', 'things to do' — or 'bias' / 'fairness' for how the scores relate to neighborhood income. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"topic"
],
"properties": {
"topic": {
"type": "string",
"maxLength": 80,
"minLength": 2,
"description": "The score or topic in the family's words: 'safety', 'family fit', 'school rating', 'schools', 'affordability', 'getting around', 'character', 'air quality', 'things to do' — or 'bias' / 'fairness' for how the scores relate to neighborhood income."
}
},
"additionalProperties": false
}Use this when a family asks for lists of NYC schools or neighborhoods picked by a rule rather than a ranking: zoned schools that beat their district while serving high-need students; high school programs with more seats per applicant; schools where no group is a majority and families rate them highly (kind 'schools'); or affordable family neighborhoods with such a school, and family neighborhoods where no single group is a majority (kind 'neighborhoods'). Optionally one borough. Each list carries its rule, its true count and its first members. State the rule; don't call members 'best' or 'hidden gems'.
| Argument | Type | Description |
|---|---|---|
| kind* | string | 'neighborhoods' for the neighborhood lists (affordable family neighborhoods with a school that beats its district; family neighborhoods where no single group is a majority); 'schools' for the school lists (zoned schools that beat their district while serving high-need students; high school programs with more seats per applicant; schools where no group is a majority and families rate them highly). |
| borough | string | Only when the family named a borough; omit it for citywide. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"kind"
],
"properties": {
"kind": {
"enum": [
"schools",
"neighborhoods"
],
"type": "string",
"description": "'neighborhoods' for the neighborhood lists (affordable family neighborhoods with a school that beats its district; family neighborhoods where no single group is a majority); 'schools' for the school lists (zoned schools that beat their district while serving high-need students; high school programs with more seats per applicant; schools where no group is a majority and families rate them highly)."
},
"borough": {
"enum": [
"Manhattan",
"Brooklyn",
"Queens",
"Bronx",
"Staten Island"
],
"type": "string",
"description": "Only when the family named a borough; omit it for citywide."
}
},
"additionalProperties": false
}Find which NYC neighborhood (NTA) an address or coordinate is in. Pass a NYC address the family gave (placed with NYC's official address directory; include the borough when you know it) OR lat+lng. Returns the NTA code, name, borough, a link to the neighborhood's Motley page, and a decision-ready family-fit summary. Use this to turn a real-world location into a neighborhood you can pass to the other tools.
| Argument | Type | Description |
|---|---|---|
| lat | number | Latitude of a point the family named or picked (NYC box) — never the device's location. Provide with lng instead of an address. |
| lng | number | Longitude of a point the family named or picked (NYC box) — never the device's location. Provide with lat instead of an address. |
| address | string | A NYC street address or place name the family gave (e.g. "350 5th Ave, Manhattan") — never the device's location. Geocoded with NYC's official address directory; include the borough when you know it. Provide this OR lat+lng. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"lat": {
"type": "number",
"maximum": 40.92,
"minimum": 40.49,
"description": "Latitude of a point the family named or picked (NYC box) — never the device's location. Provide with lng instead of an address."
},
"lng": {
"type": "number",
"maximum": -73.68,
"minimum": -74.26,
"description": "Longitude of a point the family named or picked (NYC box) — never the device's location. Provide with lat instead of an address."
},
"address": {
"type": "string",
"minLength": 3,
"description": "A NYC street address or place name the family gave (e.g. \"350 5th Ave, Manhattan\") — never the device's location. Geocoded with NYC's official address directory; include the borough when you know it. Provide this OR lat+lng."
}
},
"additionalProperties": false
}Use this when a family asks what's in one NYC neighborhood, or where a kind of place is in it: a library, playgrounds, subway stations or bus stops, coffee, groceries, restaurants, things to do, family resources (rec centers, farmers markets), healthcare (pediatricians, urgent care, hospitals, dentists) or public, charter and private schools. Searches every place we map inside the neighborhood's boundary by name, street or kind (query), or lists every place of one kind (kind); with neither, returns what kinds of places are there, with counts. Results are grouped by category, with a link to each school's page and to the neighborhood's page, which lists every place. Use the nta_code from search-neighborhoods or find-neighborhood.
| Argument | Type | Description |
|---|---|---|
| kind | string | List every place of one kind: a category (schools, parks, transit, restaurants, groceries, cafes, activities, resources = family resources, healthcare) or a specific kind (public-schools, charter-schools, private-schools, libraries, playgrounds, subway, bus, rec-centers, farmers-markets, pediatricians, urgent-care, hospitals, dentists). With a query, the query narrows within the kind. |
| query | string | What to look for: a place's name, a street, subway lines, or a kind of place in plain words ('library', 'coffee', 'subway', 'pediatrician'). Omit to list a whole kind, or to get the overview. |
| nta_code* | string | NTA code of the neighborhood (from search-neighborhoods or find-neighborhood) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"nta_code"
],
"properties": {
"kind": {
"enum": [
"schools",
"parks",
"transit",
"restaurants",
"groceries",
"cafes",
"activities",
"resources",
"healthcare",
"public-schools",
"charter-schools",
"private-schools",
"libraries",
"playgrounds",
"subway",
"bus",
"rec-centers",
"farmers-markets",
"pediatricians",
"urgent-care",
"hospitals",
"dentists"
],
"type": "string",
"description": "List every place of one kind: a category (schools, parks, transit, restaurants, groceries, cafes, activities, resources = family resources, healthcare) or a specific kind (public-schools, charter-schools, private-schools, libraries, playgrounds, subway, bus, rec-centers, farmers-markets, pediatricians, urgent-care, hospitals, dentists). With a query, the query narrows within the kind."
},
"query": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "What to look for: a place's name, a street, subway lines, or a kind of place in plain words ('library', 'coffee', 'subway', 'pediatrician'). Omit to list a whole kind, or to get the overview."
},
"nta_code": {
"type": "string",
"maxLength": 6,
"description": "NTA code of the neighborhood (from search-neighborhoods or find-neighborhood)"
}
},
"additionalProperties": false
}Use this to turn a school's name into its DBN — the official name, a common short form ('Brooklyn Tech', 'PS 321'), or a DBN to confirm. Returns candidate schools with their district, neighborhood, admission method, Motley ratings out of 100 (ratings_note says how each is built) and Motley page; pick the one that matches and pass its dbn to get-admissions-demand. Never guess a DBN. K-12 schools only (public, charter, private).
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max candidates to return |
| query* | string | The school as the family named it: its official name ('Townsend Harris High School'), a common short form ('Brooklyn Tech', 'PS 321'), or its DBN ('02M475'). |
| borough | string | Narrow a name search to one borough when the family named it. Ignored when the query is a DBN. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 5,
"maximum": 10,
"minimum": 1,
"description": "Max candidates to return"
},
"query": {
"type": "string",
"maxLength": 120,
"minLength": 2,
"description": "The school as the family named it: its official name ('Townsend Harris High School'), a common short form ('Brooklyn Tech', 'PS 321'), or its DBN ('02M475')."
},
"borough": {
"enum": [
"Manhattan",
"Brooklyn",
"Queens",
"Bronx",
"Staten Island"
],
"type": "string",
"description": "Narrow a name search to one borough when the family named it. Ignored when the query is a DBN."
}
},
"additionalProperties": false
}Get kids' activities and businesses in a neighborhood — classes, sports, arts, tutoring, etc. Use count_only for category breakdown, or limit/offset to page the full list (reports total/returned). Each place's last_refreshed is when we last confirmed it was still listed.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max activities to return (ignored when count_only) |
| offset | integer | Number of activities to skip, for paging through the full list |
| nta_code* | string | NTA code |
| count_only | boolean | Return only category counts |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"nta_code"
],
"properties": {
"limit": {
"type": "integer",
"default": 50,
"maximum": 200,
"minimum": 1,
"description": "Max activities to return (ignored when count_only)"
},
"offset": {
"type": "integer",
"default": 0,
"minimum": 0,
"description": "Number of activities to skip, for paging through the full list"
},
"nta_code": {
"type": "string",
"maxLength": 6,
"description": "NTA code"
},
"count_only": {
"type": "boolean",
"default": false,
"description": "Return only category counts"
}
},
"additionalProperties": false
}Use this when a family asks how a specific school admits students or how hard it is to get in. Returns the school's admission method in full (what it asks of a family, and when), its programs with seats and who may apply, and — where NYC MySchools publishes them — seats vs. applicants per program with a competitiveness band that is Motley's own, not a DOE rating. Most middle schools, and all charter and private schools, have no applicant counts. The counts describe the whole applicant pool: never turn them into a family's odds, chance or percentage, even when asked for one. Needs a DBN; resolve a name with find-school first.
| Argument | Type | Description |
|---|---|---|
| dbn* | string | School DBN (e.g. 02M475 for Stuyvesant, 13K430 for Brooklyn Tech). Resolve a school's name with find-school first; never guess one. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"dbn"
],
"properties": {
"dbn": {
"type": "string",
"maxLength": 40,
"description": "School DBN (e.g. 02M475 for Stuyvesant, 13K430 for Brooklyn Tech). Resolve a school's name with find-school first; never guess one."
}
},
"additionalProperties": false
}Get the full NYC school-admissions reference: every entry point from 3-K and Pre-K through Kindergarten, Gifted & Talented, and the 8 middle/high admission methods (SHSAT, audition, screened, Ed-Opt, limited unscreened, unscreened, zoned, charter lottery) — each with its typical application window. The methods carry a live program count plus a special_badge naming any extra ask beyond the standard application (an audition, a test, an open-house sign-in), null when there is none; optional band/governance filters narrow the count. Knowledge only.
| Argument | Type | Description |
|---|---|---|
| band | string | Filter the MS/HS methods to one grade band |
| governance | string | Filter the MS/HS program counts to public or charter schools |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"band": {
"enum": [
"middle",
"high"
],
"type": "string",
"description": "Filter the MS/HS methods to one grade band"
},
"governance": {
"enum": [
"public",
"charter"
],
"type": "string",
"description": "Filter the MS/HS program counts to public or charter schools"
}
},
"additionalProperties": false
}Use this when a family asks what's coming for their child — which NYC school applications (3-K, Pre-K, Kindergarten, Gifted & Talented, middle school, high school) they'll make, and when. Pass each child's current grade, or an age (0–5) for a child not in school yet. Returns every transition in the next two years with the city's published dates where it has announced them, and the typical window where it hasn't. Never present a typical window as a date.
| Argument | Type | Description |
|---|---|---|
| ages | array | Ages (0–5) of children not in school yet, when the family gave an age instead of a grade. |
| grades | array | Each child's CURRENT grade, as the family said it: 3-K, pre-k, k, 1–12. One entry per child. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"ages": {
"type": "array",
"items": {
"type": "integer",
"maximum": 5,
"minimum": 0
},
"maxItems": 4,
"description": "Ages (0–5) of children not in school yet, when the family gave an age instead of a grade."
},
"grades": {
"type": "array",
"items": {
"enum": [
"3-K",
"pre-k",
"k",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12"
],
"type": "string"
},
"maxItems": 6,
"description": "Each child's CURRENT grade, as the family said it: 3-K, pre-k, k, 1–12. One entry per child."
}
},
"additionalProperties": false
}Find neighborhoods most similar to a given one based on a 9-dimension score vector (family density, wealth, education, safety, transit, etc.). Returns similarity scores.
| Argument | Type | Description |
|---|---|---|
| limit | number | Number of comparable neighborhoods |
| nta_code* | string | NTA code to find similar neighborhoods for |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"nta_code"
],
"properties": {
"limit": {
"type": "number",
"default": 5,
"maximum": 20,
"minimum": 1,
"description": "Number of comparable neighborhoods"
},
"nta_code": {
"type": "string",
"maxLength": 6,
"description": "NTA code to find similar neighborhoods for"
}
},
"additionalProperties": false
}Get full details for a single NYC neighborhood including demographics, raw 0-100 scores, location, and a family-readable interpretation (labeled score bands + cached editorial blurbs). Use the nta_code from search-neighborhoods.
| Argument | Type | Description |
|---|---|---|
| nta_code* | string | NTA code (e.g. BK0101) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"nta_code"
],
"properties": {
"nta_code": {
"type": "string",
"maxLength": 6,
"description": "NTA code (e.g. BK0101)"
}
},
"additionalProperties": false
}Get a decision-ready, family-readable summary of one NYC neighborhood: a one-paragraph fit verdict, what stands out and what to weigh among its Family Fit scores (`tradeoffs`), labeled score bands (e.g. 'Peace of Mind: strong (78/100)'), and cached editorial blurbs — with raw scores still available, weekday-morning transit minutes to the city's main job centers, and a link to the neighborhood's Motley page. The interpretation-first front door; start here when a family wants an answer, not a data dump. A non-residential area (park, cemetery, airport, institution) isn't scored, and the summary says so.
| Argument | Type | Description |
|---|---|---|
| nta_code* | string | NTA code (e.g. BK0101) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"nta_code"
],
"properties": {
"nta_code": {
"type": "string",
"maxLength": 6,
"description": "NTA code (e.g. BK0101)"
}
},
"additionalProperties": false
}Get family resource counts for a neighborhood: recreation centers, playgrounds, libraries, hospitals, farmers markets, ADA subway stations.
| Argument | Type | Description |
|---|---|---|
| nta_code* | string | NTA code |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"nta_code"
],
"properties": {
"nta_code": {
"type": "string",
"maxLength": 6,
"description": "NTA code"
}
},
"additionalProperties": false
}Get safety and health environment indicators for a neighborhood: crime complaints, collisions, HPD violations, air quality, lead levels, asthma rates — plus a family-readable interpretation of the Peace of Mind and Air & Child Health scores.
| Argument | Type | Description |
|---|---|---|
| nta_code* | string | NTA code |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"nta_code"
],
"properties": {
"nta_code": {
"type": "string",
"maxLength": 6,
"description": "NTA code"
}
},
"additionalProperties": false
}Get schools within a neighborhood — public, charter, and private. Includes each school's Motley ratings out of 100 (elementary and middle schools on grades 3-8 state tests, high schools on graduation and Regents results; ratings_note says how each is built), grade levels, contact info. Use count_only for a quick summary, or limit/offset to page the full list (the response reports total/returned).
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max schools to return (ignored when count_only) |
| offset | integer | Number of schools to skip, for paging through the full list |
| nta_code* | string | NTA code |
| count_only | boolean | Return only counts by governance type |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"nta_code"
],
"properties": {
"limit": {
"type": "integer",
"default": 50,
"maximum": 200,
"minimum": 1,
"description": "Max schools to return (ignored when count_only)"
},
"offset": {
"type": "integer",
"default": 0,
"minimum": 0,
"description": "Number of schools to skip, for paging through the full list"
},
"nta_code": {
"type": "string",
"maxLength": 6,
"description": "NTA code"
},
"count_only": {
"type": "boolean",
"default": false,
"description": "Return only counts by governance type"
}
},
"additionalProperties": false
}Use this when a family asks which elementary school is zoned for a specific NYC address, such as an apartment or building they name. NYC draws school zones building by building, so pass the street address exactly as they typed it — building number and street, ideally with the borough — never the device's location. Returns the zoned K-5 school, the neighborhood, and how zoned admission works; some areas, like all of District 1, have no zoned school.
| Argument | Type | Description |
|---|---|---|
| address* | string | The NYC street address to look up, as the family typed it, with the building number and ideally the borough — e.g. "123 7th Ave, Brooklyn". A zone line can run between two buildings on one block, so a city or neighborhood can't answer this; never the device's location. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"address"
],
"properties": {
"address": {
"type": "string",
"maxLength": 200,
"minLength": 5,
"description": "The NYC street address to look up, as the family typed it, with the building number and ideally the borough — e.g. \"123 7th Ave, Brooklyn\". A zone line can run between two buildings on one block, so a city or neighborhood can't answer this; never the device's location."
}
},
"additionalProperties": false
}Rank NYC's residential neighborhoods by what a family cares about — the same ranking as Best fit on motley.nyc. Pass ranked priority words, most important first: families, schools, affordability, character, getting-around, safety, air-and-health (and synonyms such as crime, rent, transit, commute, kids), plus two factors — parks or playgrounds (the share of homes within a 10-minute walk of an NYC Parks playground) and diversity (how evenly residents spread across five census groups). Or pass per-metric weights for the seven scores. To rank by ONE score alone ('safest in Queens', 'rate Brooklyn by things to do'), pass sort_by instead — Family Fit and Things to Do included — and relay what sort_by.measures says the score counts. Optionally scope to one borough. Returns the top neighborhoods with a fit score and the score breakdown, which factors counted, any priority words we don't measure (relay them — they added nothing), and a best_fit_url that opens the same ranking on motley.nyc. A deterministic weighted sort over neighborhood-level data, not a per-child school match.
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many top neighborhoods to return |
| borough | string | Restrict the ranking to one borough |
| sort_by | string | Rank by ONE score alone, highest first — for 'safest neighborhoods in Queens' or 'rate Brooklyn by things to do'. family-fit is the overall Family Fit score; families is the families score. When set, weights and priorities are ignored (0.9.0). |
| weights | object | Per-metric importance (0+; higher = matters more). Any subset; normalized internally. When given, it sets the seven scores and the score words in `priorities` are ignored; the factor words (parks, diversity) in `priorities` still count. |
Search and filter NYC neighborhoods by borough, by name (typos and nicknames like 'Bed-Stuy' or 'UWS' included), or by a description of what a family wants nearby ('near the water', 'brownstones and big parks'). Returns NTA codes, names, boroughs, and centroid coordinates; with a query, name matches come first and each result says what it matched on (match_reason). For ranking by a score, use rank-neighborhoods instead.
| Argument | Type | Description |
|---|---|---|
| limit | number | Max results |
| query | string | A neighborhood's name (official or common, typos and nicknames like 'Bed-Stuy' or 'UWS' included), or a description of what the family wants nearby ('near the water', 'brownstones and big parks'). Name matches come first; each match says what it matched on. |
| borough | string | Filter by borough |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "number",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Max results"
},
"query": {
"type": "string",
"description": "A neighborhood's name (official or common, typos and nicknames like 'Bed-Stuy' or 'UWS' included), or a description of what the family wants nearby ('near the water', 'brownstones and big parks'). Name matches come first; each match says what it matched on."
},
"borough": {
"enum": [
"Manhattan",
"Brooklyn",
"Queens",
"Bronx",
"Staten Island"
],
"type": "string",
"description": "Filter by borough"
}
},
"additionalProperties": false
}| priorities | array | What the family cares about, most important first — e.g. ["parks","schools","safety"]. Score words: families, schools, affordability, character, getting-around, safety, air-and-health (and synonyms like crime, rent, transit, commute, kids). Factor words: parks or playgrounds (homes near an NYC Parks playground), diversity. Weighted 1, ½, ⅓… by position. Words we don't map come back in `unrecognized_priorities`. |
| min_population | integer | Residential floor — drops parks/cemeteries/airports that score ~100 by having almost no residents (default 1000). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "How many top neighborhoods to return"
},
"borough": {
"enum": [
"Manhattan",
"Brooklyn",
"Queens",
"Bronx",
"Staten Island"
],
"type": "string",
"description": "Restrict the ranking to one borough"
},
"sort_by": {
"enum": [
"family-fit",
"families",
"schools",
"affordability",
"character",
"getting-around",
"safety",
"air-and-health",
"things-to-do"
],
"type": "string",
"description": "Rank by ONE score alone, highest first — for 'safest neighborhoods in Queens' or 'rate Brooklyn by things to do'. family-fit is the overall Family Fit score; families is the families score. When set, weights and priorities are ignored (0.9.0)."
},
"weights": {
"type": "object",
"properties": {
"safety_score": {
"type": "number",
"minimum": 0
},
"wealth_index": {
"type": "number",
"minimum": 0
},
"family_density": {
"type": "number",
"minimum": 0
},
"health_environment": {
"type": "number",
"minimum": 0
},
"education_orientation": {
"type": "number",
"minimum": 0
},
"transit_accessibility": {
"type": "number",
"minimum": 0
},
"neighborhood_stability": {
"type": "number",
"minimum": 0
}
},
"description": "Per-metric importance (0+; higher = matters more). Any subset; normalized internally. When given, it sets the seven scores and the score words in `priorities` are ignored; the factor words (parks, diversity) in `priorities` still count.",
"additionalProperties": false
},
"priorities": {
"type": "array",
"items": {
"type": "string"
},
"description": "What the family cares about, most important first — e.g. [\"parks\",\"schools\",\"safety\"]. Score words: families, schools, affordability, character, getting-around, safety, air-and-health (and synonyms like crime, rent, transit, commute, kids). Factor words: parks or playgrounds (homes near an NYC Parks playground), diversity. Weighted 1, ½, ⅓… by position. Words we don't map come back in `unrecognized_priorities`."
},
"min_population": {
"type": "integer",
"default": 1000,
"minimum": 0,
"description": "Residential floor — drops parks/cemeteries/airports that score ~100 by having almost no residents (default 1000)."
}
},
"additionalProperties": false
}