@mdxai/claude
Anthropic Claude integration for MDX
@mdxai/claude
Generate and transform MDX content using Anthropic's Claude.
Installation
npm install @mdxai/claudeConfiguration
export ANTHROPIC_API_KEY=sk-ant-...import { configure } from '@mdxai/claude'
configure({
apiKey: process.env.ANTHROPIC_API_KEY,
model: 'claude-sonnet-4-20250514', // default
maxTokens: 4096,
})Usage
Generate Content
import { generateMDX } from '@mdxai/claude'
const result = await generateMDX({
prompt: 'Write a guide about TypeScript generics',
schema: {
$type: 'Guide',
title: 'string',
difficulty: 'beginner | intermediate | advanced',
},
})
console.log(result.frontmatter.title)
console.log(result.content)Transform Content
import { transformMDX } from '@mdxai/claude'
const enhanced = await transformMDX(existingMDX, {
instructions: `
- Add code examples for each concept
- Include TypeScript types
- Add a summary section at the end
`,
})Extract Data
import { extractFromMDX } from '@mdxai/claude'
const data = await extractFromMDX(documentation, {
schema: {
apis: [{
name: 'string',
method: 'string',
path: 'string',
description: 'string',
}],
},
})Configuration
interface ClaudeConfig {
/** API key */
apiKey: string
/** Model to use */
model?: 'claude-sonnet-4-20250514' | 'claude-opus-4-20250514' | 'claude-3-haiku-20240307'
/** Maximum tokens to generate */
maxTokens?: number
/** Temperature (0-1) */
temperature?: number
/** System prompt */
systemPrompt?: string
}Advanced Features
Custom System Prompts
const result = await generateMDX({
prompt: 'Document the authentication flow',
systemPrompt: `
You are a technical writer specializing in security documentation.
Always include:
- Security considerations
- Best practices
- Common pitfalls
`,
})Streaming
import { streamMDX } from '@mdxai/claude'
const stream = await streamMDX({
prompt: 'Write a comprehensive API reference',
})
for await (const chunk of stream) {
process.stdout.write(chunk)
}Tool Use
import { generateWithTools } from '@mdxai/claude'
const result = await generateWithTools({
prompt: 'Document this codebase',
tools: {
readFile: async (path: string) => {
return await fs.readFile(path, 'utf-8')
},
listFiles: async (pattern: string) => {
return await glob(pattern)
},
},
})Batch Processing
import { batchGenerate } from '@mdxai/claude'
const topics = [
'React hooks',
'State management',
'API integration',
]
const results = await batchGenerate(
topics.map(topic => ({
prompt: `Write a tutorial about ${topic}`,
schema: tutorialSchema,
})),
{ concurrency: 3 }
)Examples
API Documentation Generator
import { generateMDX } from '@mdxai/claude'
import { readFile } from 'fs/promises'
async function generateAPIDocs(sourceFile: string) {
const source = await readFile(sourceFile, 'utf-8')
return generateMDX({
prompt: `Generate API documentation for this code:\n\n${source}`,
schema: {
$type: 'APIReference',
title: 'string',
description: 'string',
functions: [{
name: 'string',
description: 'string',
parameters: [{
name: 'string',
type: 'string',
description: 'string',
}],
returns: 'string',
example: 'string',
}],
},
})
}Content Translation
import { transformMDX } from '@mdxai/claude'
async function translateDocs(mdx: string, targetLang: string) {
return transformMDX(mdx, {
instructions: `
Translate this documentation to ${targetLang}.
- Keep all code blocks unchanged
- Preserve MDX component syntax
- Maintain technical accuracy
`,
})
}Content Review
import { extractFromMDX } from '@mdxai/claude'
async function reviewContent(mdx: string) {
return extractFromMDX(mdx, {
prompt: 'Review this documentation for issues',
schema: {
issues: [{
type: 'error | warning | suggestion',
location: 'string',
description: 'string',
suggestion: 'string',
}],
score: 'number',
},
})
}Error Handling
import { generateMDX, ClaudeError } from '@mdxai/claude'
try {
const result = await generateMDX({ prompt })
} catch (error) {
if (error instanceof ClaudeError) {
switch (error.code) {
case 'rate_limit':
await sleep(error.retryAfter * 1000)
// Retry
break
case 'context_length':
// Reduce prompt size
break
case 'invalid_api_key':
// Check configuration
break
}
}
}