Skip to main content
Glama

Search Standards by Crosscutting Concept

search_by_crosscutting_concept

Find NGSS standards aligned to a specific Crosscutting Concept, such as Patterns or Cause and Effect, to quickly locate relevant performance expectations.

Instructions

Find all NGSS standards using a specific Crosscutting Concept (CCC). Examples: "Patterns", "Cause and Effect", "Systems and System Models", "Energy and Matter"

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
conceptYesCrosscutting Concept name
detail_levelNoResponse detail level: minimal (code, topic, PE 50 chars), summary (+ keywords top 3, PE 150 chars), full (complete standard)full

Implementation Reference

  • The main handler function for the search_by_crosscutting_concept tool. It takes 'concept' (a CCC value) and optional 'detail_level', fetches all standards from the database, filters by exact CCC match, formats the response, and returns JSON with token metadata.
      async ({ concept, detail_level }) => {
        try {
          ensureInitialized();
          const db = getDatabase();
          const allStandards = db.getAllStandards();
    
          // Filter by CCC name (exact match)
          const filtered = allStandards.filter(s => s.ccc.name === concept);
    
          const formattedStandards = formatResponseArray(filtered, detail_level as DetailLevel);
          const tokens = getTokenMetadata(concept, formattedStandards);
    
          const result = {
            concept,
            total: filtered.length,
            standards: formattedStandards,
            _metadata: { tokens }
          };
    
          return {
            content: [{
              type: 'text',
              text: JSON.stringify(result, null, 2)
            }]
          };
        } catch (error) {
          console.error('search_by_crosscutting_concept error:', error);
          return {
            content: [{
              type: 'text',
              text: JSON.stringify({
                error: 'Internal Error',
                message: error instanceof Error ? error.message : String(error),
                code: 'INTERNAL_ERROR'
              }, null, 2)
            }],
            isError: true
          };
        }
      }
    );
  • Registration of the 'search_by_crosscutting_concept' tool with the MCP server, including title, description, and input schema definition.
    server.registerTool(
      'search_by_crosscutting_concept',
      {
        title: 'Search Standards by Crosscutting Concept',
        description: 'Find all NGSS standards using a specific Crosscutting Concept (CCC). Examples: "Patterns", "Cause and Effect", "Systems and System Models", "Energy and Matter"',
        inputSchema: {
          concept: z.enum(CCC_VALUES)
            .describe('Crosscutting Concept name'),
          detail_level: z.enum(['minimal', 'summary', 'full'])
            .optional()
            .default('full')
            .describe('Response detail level: minimal (code, topic, PE 50 chars), summary (+ keywords top 3, PE 150 chars), full (complete standard)')
        }
      },
      async ({ concept, detail_level }) => {
        try {
          ensureInitialized();
          const db = getDatabase();
          const allStandards = db.getAllStandards();
    
          // Filter by CCC name (exact match)
          const filtered = allStandards.filter(s => s.ccc.name === concept);
    
          const formattedStandards = formatResponseArray(filtered, detail_level as DetailLevel);
          const tokens = getTokenMetadata(concept, formattedStandards);
    
          const result = {
            concept,
            total: filtered.length,
            standards: formattedStandards,
            _metadata: { tokens }
          };
    
          return {
            content: [{
              type: 'text',
              text: JSON.stringify(result, null, 2)
            }]
          };
        } catch (error) {
          console.error('search_by_crosscutting_concept error:', error);
          return {
            content: [{
              type: 'text',
              text: JSON.stringify({
                error: 'Internal Error',
                message: error instanceof Error ? error.message : String(error),
                code: 'INTERNAL_ERROR'
              }, null, 2)
            }],
            isError: true
          };
        }
      }
    );
  • Input schema for the tool: 'concept' is a required enum of CCC_VALUES, 'detail_level' is an optional enum ('minimal', 'summary', 'full') defaulting to 'full'.
    inputSchema: {
      concept: z.enum(CCC_VALUES)
        .describe('Crosscutting Concept name'),
      detail_level: z.enum(['minimal', 'summary', 'full'])
        .optional()
        .default('full')
        .describe('Response detail level: minimal (code, topic, PE 50 chars), summary (+ keywords top 3, PE 150 chars), full (complete standard)')
    }
  • Helper function getTokenMetadata used to estimate input/output tokens for the response metadata.
    export function getTokenMetadata(input: string, output: unknown): {
      input_tokens: number;
      output_tokens: number;
      total_tokens: number;
    } {
      const inputTokens = estimateTokens(input);
      const outputTokens = estimateTokensForObject(output);
    
      return {
        input_tokens: inputTokens,
        output_tokens: outputTokens,
        total_tokens: inputTokens + outputTokens
      };
    }
  • Helper function formatResponseArray used to format standards based on the requested detail level (minimal, summary, or full).
    export function formatResponseArray(
      standards: Standard[],
      detailLevel: DetailLevel = 'full'
    ): (MinimalStandard | SummaryStandard | Standard)[] {
      return standards.map(standard => formatResponse(standard, detailLevel));
    }
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description lacks details such as read-only behavior, return format, pagination, or authentication needs. For a search tool, it fails to disclose whether it returns a list or single item, or how results are ordered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence followed by examples, which is concise and front-loaded. It could be slightly more efficient by integrating examples into a shorter phrase, but it remains clear and avoids fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with enums, the description provides enough context for typical use. However, without an output schema, it omits details about the structure of the returned standards (e.g., whether full text is included). The lack of explicit mention of list versus single item or sorting is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds examples of CCC names, but they don't exactly match the enum values in the schema (full sentence descriptions vs. short names), which could cause confusion. The parameter semantics are not significantly enhanced beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'find' and resource 'NGSS standards' filtered by a specific Crosscutting Concept (CCC). It distinguishes from sibling tools like search_by_practice or search_by_domain, as each targets a different dimension of standards.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a CCC is known, but it does not explicitly guide when to use this tool vs. alternatives like search_by_disciplinary_core_idea. There are no exclusions or when-not conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Sallvainian/NGSS-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server