diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 7a56472..a3906fc 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "2.8.0"
+ ".": "2.9.0"
}
diff --git a/.stats.yml b/.stats.yml
index 3b484e3..74e73bc 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
-configured_endpoints: 37
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-758c3a2fbd5b7be61c8e6e0ad2e6a5ec30695747bb675960d888c497647d13d7.yml
-openapi_spec_hash: 00002d90bde02f67e174368ae470c597
-config_hash: 2bea1743c84d63bd61f8501a6ea63065
+configured_endpoints: 38
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-155e4761d62255841349c0f8a01b0a9c463ea1d1f2d6c4fd8d1a75c8bef6f226.yml
+openapi_spec_hash: ab91f77e7c9d992400cbc7fc8a9e76c1
+config_hash: bff282047fafdad771fb7ec685f56944
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f345f52..51d6cc0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,13 @@
# Changelog
+## 2.9.0 (2026-08-05)
+
+Full Changelog: [v2.8.0...v2.9.0](https://github.com/context-dot-dev/context-typescript-sdk/compare/v2.8.0...v2.9.0)
+
+### Features
+
+* **api:** manual updates ([bdb799c](https://github.com/context-dot-dev/context-typescript-sdk/commit/bdb799c235c805d25b4caaf591d70a5315a1e1af))
+
## 2.8.0 (2026-08-01)
Full Changelog: [v2.7.0...v2.8.0](https://github.com/context-dot-dev/context-typescript-sdk/compare/v2.7.0...v2.8.0)
diff --git a/api.md b/api.md
index 083e0f0..1e30ea7 100644
--- a/api.md
+++ b/api.md
@@ -56,11 +56,13 @@ Types:
- BrandRetrieveResponse
- BrandRetrieveSimplifiedResponse
+- BrandSearchResponse
Methods:
- client.brand.retrieve({ ...params }) -> BrandRetrieveResponse
- client.brand.retrieveSimplified({ ...params }) -> BrandRetrieveSimplifiedResponse
+- client.brand.search({ ...params }) -> BrandSearchResponse
# Industry
diff --git a/package.json b/package.json
index 46f2c6a..3b0ac17 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "context.dev",
- "version": "2.8.0",
+ "version": "2.9.0",
"description": "The official TypeScript library for the Context Dev API",
"author": "Context Dev ",
"types": "dist/index.d.ts",
diff --git a/packages/mcp-server/manifest.json b/packages/mcp-server/manifest.json
index 6599567..00d23ca 100644
--- a/packages/mcp-server/manifest.json
+++ b/packages/mcp-server/manifest.json
@@ -1,7 +1,7 @@
{
"dxt_version": "0.2",
"name": "context.dev-mcp",
- "version": "2.8.0",
+ "version": "2.9.0",
"description": "The official MCP Server for the Context Dev API",
"author": {
"name": "Context Dev",
diff --git a/packages/mcp-server/package.json b/packages/mcp-server/package.json
index 6acaeef..bc11f7d 100644
--- a/packages/mcp-server/package.json
+++ b/packages/mcp-server/package.json
@@ -1,6 +1,6 @@
{
"name": "context.dev-mcp",
- "version": "2.8.0",
+ "version": "2.9.0",
"description": "The official MCP Server for the Context Dev API",
"author": "Context Dev ",
"types": "dist/index.d.ts",
diff --git a/packages/mcp-server/src/code-tool-worker.ts b/packages/mcp-server/src/code-tool-worker.ts
index 6c28678..0d76562 100644
--- a/packages/mcp-server/src/code-tool-worker.ts
+++ b/packages/mcp-server/src/code-tool-worker.ts
@@ -124,6 +124,7 @@ const fuse = new Fuse(
'client.ai.extractProducts',
'client.brand.retrieve',
'client.brand.retrieveSimplified',
+ 'client.brand.search',
'client.industry.retrieveNaics',
'client.industry.retrieveSic',
'client.utility.prefetch',
diff --git a/packages/mcp-server/src/local-docs-search.ts b/packages/mcp-server/src/local-docs-search.ts
index ab4050c..58a577d 100644
--- a/packages/mcp-server/src/local-docs-search.ts
+++ b/packages/mcp-server/src/local-docs-search.ts
@@ -946,6 +946,56 @@ const EMBEDDED_METHODS: MethodEntry[] = [
},
},
},
+ {
+ name: 'search',
+ endpoint: '/brand/search',
+ httpMethod: 'get',
+ summary: 'Brand Search',
+ description:
+ 'Search brands by name or domain and get back up to 10 lightweight matches (domain, name, logo), most popular first: by Tranco rank, then market cap for brands outside the Tranco list, with text relevance breaking ties. Matching is prefix-based with no typo tolerance, so it is suited to autocomplete. Only brands already in the Context.dev index are returned — use /brand/retrieve to fetch (and index) a specific domain. Free on Pro and Scale plans; costs 1 credit per request on the Free and Starter plans.',
+ stainlessPath: '(resource) brand > (method) search',
+ qualified: 'client.brand.search',
+ params: ['query: string;', 'tags?: string[];'],
+ response:
+ '{ results: { domain: string; logo: string; name: string; }[]; key_metadata?: { credits_consumed: number; credits_remaining: number; }; }',
+ markdown:
+ "## search\n\n`client.brand.search(query: string, tags?: string[]): { results: object[]; key_metadata?: object; }`\n\n**get** `/brand/search`\n\nSearch brands by name or domain and get back up to 10 lightweight matches (domain, name, logo), most popular first: by Tranco rank, then market cap for brands outside the Tranco list, with text relevance breaking ties. Matching is prefix-based with no typo tolerance, so it is suited to autocomplete. Only brands already in the Context.dev index are returned — use /brand/retrieve to fetch (and index) a specific domain. Free on Pro and Scale plans; costs 1 credit per request on the Free and Starter plans.\n\n### Parameters\n\n- `query: string`\n Search term, matched against brand names and domains by prefix (e.g. 'nike', 'nike.com', 'nik').\n\n- `tags?: string[]`\n Optional comma-separated caller-defined tags for tracking this request. Tags are recorded on the request's usage log and can be used to filter usage on the dashboard usage page. Up to 20 tags, each 1-50 characters.\n\n### Returns\n\n- `{ results: { domain: string; logo: string; name: string; }[]; key_metadata?: { credits_consumed: number; credits_remaining: number; }; }`\n\n - `results: { domain: string; logo: string; name: string; }[]`\n - `key_metadata?: { credits_consumed: number; credits_remaining: number; }`\n\n### Example\n\n```typescript\nimport ContextDev from 'context.dev';\n\nconst client = new ContextDev();\n\nconst response = await client.brand.search({ query: 'x' });\n\nconsole.log(response);\n```",
+ perLanguage: {
+ typescript: {
+ method: 'client.brand.search',
+ example:
+ "import ContextDev from 'context.dev';\n\nconst client = new ContextDev({\n apiKey: process.env['CONTEXT_DEV_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.brand.search({ query: 'x' });\n\nconsole.log(response.results);",
+ },
+ python: {
+ method: 'brand.search',
+ example:
+ 'import os\nfrom context.dev import ContextDev\n\nclient = ContextDev(\n api_key=os.environ.get("CONTEXT_DEV_API_KEY"), # This is the default and can be omitted\n)\nresponse = client.brand.search(\n query="x",\n)\nprint(response.results)',
+ },
+ go: {
+ method: 'client.Brand.Search',
+ example:
+ 'package main\n\nimport (\n\t"context"\n\t"fmt"\n\n\t"github.com/context-dot-dev/context-go-sdk"\n\t"github.com/context-dot-dev/context-go-sdk/option"\n)\n\nfunc main() {\n\tclient := contextdev.NewClient(\n\t\toption.WithAPIKey("My API Key"),\n\t)\n\tresponse, err := client.Brand.Search(context.TODO(), contextdev.BrandSearchParams{\n\t\tQuery: "x",\n\t})\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf("%+v\\n", response.Results)\n}\n',
+ },
+ ruby: {
+ method: 'brand.search',
+ example:
+ 'require "context_dev"\n\ncontext_dev = ContextDev::Client.new(api_key: "My API Key")\n\nresponse = context_dev.brand.search(query: "x")\n\nputs(response)',
+ },
+ cli: {
+ method: 'brand search',
+ example: "context-dev brand search \\\n --api-key 'My API Key' \\\n --query x",
+ },
+ php: {
+ method: 'brand->search',
+ example:
+ "brand->search(\n query: 'x', tags: ['production', 'team-alpha']\n);\n\nvar_dump($response);",
+ },
+ http: {
+ example:
+ 'curl https://api.context.dev/v1/brand/search \\\n -H "Authorization: Bearer $CONTEXT_DEV_API_KEY"',
+ },
+ },
+ },
{
name: 'retrieve_simplified',
endpoint: '/brand/retrieve-simplified',
diff --git a/packages/mcp-server/src/methods.ts b/packages/mcp-server/src/methods.ts
index e3ee5c2..2489ea0 100644
--- a/packages/mcp-server/src/methods.ts
+++ b/packages/mcp-server/src/methods.ts
@@ -106,6 +106,12 @@ export const sdkMethods: SdkMethod[] = [
httpMethod: 'get',
httpPath: '/brand/retrieve-simplified',
},
+ {
+ clientCallName: 'client.brand.search',
+ fullyQualifiedName: 'brand.search',
+ httpMethod: 'get',
+ httpPath: '/brand/search',
+ },
{
clientCallName: 'client.industry.retrieveNaics',
fullyQualifiedName: 'industry.retrieveNaics',
diff --git a/packages/mcp-server/src/server.ts b/packages/mcp-server/src/server.ts
index 659f676..497490c 100644
--- a/packages/mcp-server/src/server.ts
+++ b/packages/mcp-server/src/server.ts
@@ -28,7 +28,7 @@ export const newMcpServer = async ({
new McpServer(
{
name: 'context_dev_api',
- version: '2.8.0',
+ version: '2.9.0',
},
{
instructions: await getInstructions({ stainlessApiKey, customInstructionsPath }),
diff --git a/src/client.ts b/src/client.ts
index 740ec43..c955f7a 100644
--- a/src/client.ts
+++ b/src/client.ts
@@ -45,6 +45,8 @@ import {
BrandRetrieveResponse,
BrandRetrieveSimplifiedParams,
BrandRetrieveSimplifiedResponse,
+ BrandSearchParams,
+ BrandSearchResponse,
} from './resources/brand';
import {
Industry,
@@ -891,8 +893,10 @@ export declare namespace ContextDev {
Brand as Brand,
type BrandRetrieveResponse as BrandRetrieveResponse,
type BrandRetrieveSimplifiedResponse as BrandRetrieveSimplifiedResponse,
+ type BrandSearchResponse as BrandSearchResponse,
type BrandRetrieveParams as BrandRetrieveParams,
type BrandRetrieveSimplifiedParams as BrandRetrieveSimplifiedParams,
+ type BrandSearchParams as BrandSearchParams,
};
export {
diff --git a/src/resources/brand.ts b/src/resources/brand.ts
index c27b7ba..9435c22 100644
--- a/src/resources/brand.ts
+++ b/src/resources/brand.ts
@@ -42,6 +42,24 @@ export class Brand extends APIResource {
): APIPromise {
return this._client.get('/brand/retrieve-simplified', { query, ...options });
}
+
+ /**
+ * Search brands by name or domain and get back up to 10 lightweight matches
+ * (domain, name, logo), most popular first: by Tranco rank, then market cap for
+ * brands outside the Tranco list, with text relevance breaking ties. Matching is
+ * prefix-based with no typo tolerance, so it is suited to autocomplete. Only
+ * brands already in the Context.dev index are returned — use /brand/retrieve to
+ * fetch (and index) a specific domain. Free on Pro and Scale plans; costs 1 credit
+ * per request on the Free and Starter plans.
+ *
+ * @example
+ * ```ts
+ * const response = await client.brand.search({ query: 'x' });
+ * ```
+ */
+ search(query: BrandSearchParams, options?: RequestOptions): APIPromise {
+ return this._client.get('/brand/search', { query, ...options });
+ }
}
export interface BrandRetrieveResponse {
@@ -1021,6 +1039,55 @@ export namespace BrandRetrieveSimplifiedResponse {
}
}
+export interface BrandSearchResponse {
+ /**
+ * Up to 10 matching brands, most popular first. Empty when nothing matches.
+ */
+ results: Array;
+
+ /**
+ * Metadata about the API key used for the request. Included in every response
+ * whenever a valid API key is provided, even when the response status is not 200.
+ */
+ key_metadata?: BrandSearchResponse.KeyMetadata;
+}
+
+export namespace BrandSearchResponse {
+ export interface Result {
+ /**
+ * The brand's domain.
+ */
+ domain: string;
+
+ /**
+ * Logo link URL that serves the brand's logo, generated per request for the
+ * calling organization.
+ */
+ logo: string;
+
+ /**
+ * The brand's name. Empty string when unknown.
+ */
+ name: string;
+ }
+
+ /**
+ * Metadata about the API key used for the request. Included in every response
+ * whenever a valid API key is provided, even when the response status is not 200.
+ */
+ export interface KeyMetadata {
+ /**
+ * The number of credits consumed by this request.
+ */
+ credits_consumed: number;
+
+ /**
+ * The number of credits remaining for your organization after this request.
+ */
+ credits_remaining: number;
+ }
+}
+
export type BrandRetrieveParams =
| BrandRetrieveParams.BrandRetrieveByDomainRequest
| BrandRetrieveParams.BrandRetrieveByNameRequest
@@ -1932,11 +1999,28 @@ export interface BrandRetrieveSimplifiedParams {
timeoutMS?: number;
}
+export interface BrandSearchParams {
+ /**
+ * Search term, matched against brand names and domains by prefix (e.g. 'nike',
+ * 'nike.com', 'nik').
+ */
+ query: string;
+
+ /**
+ * Optional comma-separated caller-defined tags for tracking this request. Tags are
+ * recorded on the request's usage log and can be used to filter usage on the
+ * dashboard usage page. Up to 20 tags, each 1-50 characters.
+ */
+ tags?: Array;
+}
+
export declare namespace Brand {
export {
type BrandRetrieveResponse as BrandRetrieveResponse,
type BrandRetrieveSimplifiedResponse as BrandRetrieveSimplifiedResponse,
+ type BrandSearchResponse as BrandSearchResponse,
type BrandRetrieveParams as BrandRetrieveParams,
type BrandRetrieveSimplifiedParams as BrandRetrieveSimplifiedParams,
+ type BrandSearchParams as BrandSearchParams,
};
}
diff --git a/src/resources/index.ts b/src/resources/index.ts
index e28f518..e8048a9 100644
--- a/src/resources/index.ts
+++ b/src/resources/index.ts
@@ -26,8 +26,10 @@ export {
Brand,
type BrandRetrieveResponse,
type BrandRetrieveSimplifiedResponse,
+ type BrandSearchResponse,
type BrandRetrieveParams,
type BrandRetrieveSimplifiedParams,
+ type BrandSearchParams,
} from './brand';
export {
Industry,
diff --git a/src/version.ts b/src/version.ts
index 3981a8d..07e4d36 100644
--- a/src/version.ts
+++ b/src/version.ts
@@ -1 +1 @@
-export const VERSION = '2.8.0'; // x-release-please-version
+export const VERSION = '2.9.0'; // x-release-please-version
diff --git a/tests/api-resources/brand.test.ts b/tests/api-resources/brand.test.ts
index d504b5a..30938b9 100644
--- a/tests/api-resources/brand.test.ts
+++ b/tests/api-resources/brand.test.ts
@@ -55,4 +55,21 @@ describe('resource brand', () => {
timeoutMS: 1000,
});
});
+
+ // Mock server tests are disabled
+ test.skip('search: only required params', async () => {
+ const responsePromise = client.brand.search({ query: 'x' });
+ const rawResponse = await responsePromise.asResponse();
+ expect(rawResponse).toBeInstanceOf(Response);
+ const response = await responsePromise;
+ expect(response).not.toBeInstanceOf(Response);
+ const dataAndResponse = await responsePromise.withResponse();
+ expect(dataAndResponse.data).toBe(response);
+ expect(dataAndResponse.response).toBe(rawResponse);
+ });
+
+ // Mock server tests are disabled
+ test.skip('search: required and optional params', async () => {
+ const response = await client.brand.search({ query: 'x', tags: ['production', 'team-alpha'] });
+ });
});