Skip to main content
Glama
SearchBox.tsx1.49 kB
"use client"; import { useState, useCallback } from 'react'; import { useRouter, usePathname, useSearchParams } from 'next/navigation'; export default function SearchBox() { const router = useRouter(); const pathname = usePathname(); const searchParams = useSearchParams(); const [query, setQuery] = useState(searchParams.get('query') || ''); const createQueryString = useCallback( (name: string, value: string) => { const params = new URLSearchParams(searchParams.toString()); if (value) { params.set(name, value); } else { params.delete(name); } return params.toString(); }, [searchParams] ); const handleSearch = (e: React.FormEvent) => { e.preventDefault(); const newQueryString = createQueryString('query', query); router.push(`${pathname}?${newQueryString}`); }; return ( <form onSubmit={handleSearch} className="w-full max-w-3xl mx-auto mb-8"> <div className="flex items-center border rounded-lg overflow-hidden shadow-sm"> <input type="text" value={query} onChange={(e) => setQuery(e.target.value)} placeholder="Search tools by name or description..." className="flex-grow p-3 outline-none dark:bg-gray-800" /> <button type="submit" className="bg-blue-500 hover:bg-blue-600 text-white px-4 py-3" > Search </button> </div> </form> ); }

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/thomasdavis/blah'

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