Ctrl + k

or run

tessl search
Log in

evernote-install-auth

tessl install github:jeremylongshore/claude-code-plugins-plus-skills --skill evernote-install-auth
github.com/jeremylongshore/claude-code-plugins-plus-skills

Install and configure Evernote SDK and OAuth authentication. Use when setting up a new Evernote integration, configuring API keys, or initializing Evernote in your project. Trigger with phrases like "install evernote", "setup evernote", "evernote auth", "configure evernote API", "evernote oauth".

Review Score

84%

Validation Score

12/16

Implementation Score

77%

Activation Score

90%

Evernote Install & Auth

Overview

Set up Evernote SDK and configure OAuth 1.0a authentication for accessing the Evernote Cloud API.

Prerequisites

  • Node.js 18+ or Python 3.10+
  • Package manager (npm, pnpm, or pip)
  • Evernote developer account
  • API key from Evernote Developer Portal (requires approval, allow 5 business days)

Instructions

Step 1: Request API Key

  1. Go to Evernote Developer Portal
  2. Request an API key via the contact form
  3. Wait for manual approval (up to 5 business days)
  4. Receive your consumerKey and consumerSecret

Step 2: Install SDK

# Node.js
npm install evernote

# Python
pip install evernote

Step 3: Configure Environment

# Create .env file
cat << 'EOF' >> .env
EVERNOTE_CONSUMER_KEY=your-consumer-key
EVERNOTE_CONSUMER_SECRET=your-consumer-secret
EVERNOTE_SANDBOX=true
EOF

Step 4: Initialize OAuth Client

// Node.js - Initialize client for OAuth flow
const Evernote = require('evernote');

const client = new Evernote.Client({
  consumerKey: process.env.EVERNOTE_CONSUMER_KEY,
  consumerSecret: process.env.EVERNOTE_CONSUMER_SECRET,
  sandbox: process.env.EVERNOTE_SANDBOX === 'true',
  china: false
});
# Python - Initialize client
from evernote.api.client import EvernoteClient

client = EvernoteClient(
    consumer_key='your-consumer-key',
    consumer_secret='your-consumer-secret',
    sandbox=True
)

Step 5: Implement OAuth Flow

// Step 5a: Get request token and redirect URL
const callbackUrl = 'http://localhost:3000/oauth/callback';

client.getRequestToken(callbackUrl, (error, oauthToken, oauthTokenSecret) => {
  if (error) {
    console.error('Failed to get request token:', error);
    return;
  }

  // Store tokens in session (required for callback)
  req.session.oauthToken = oauthToken;
  req.session.oauthTokenSecret = oauthTokenSecret;

  // Redirect user to Evernote authorization page
  const authorizeUrl = client.getAuthorizeUrl(oauthToken);
  res.redirect(authorizeUrl);
});
// Step 5b: Handle OAuth callback
app.get('/oauth/callback', (req, res) => {
  const oauthVerifier = req.query.oauth_verifier;

  client.getAccessToken(
    req.session.oauthToken,
    req.session.oauthTokenSecret,
    oauthVerifier,
    (error, oauthAccessToken, oauthAccessTokenSecret, results) => {
      if (error) {
        console.error('Failed to get access token:', error);
        return res.status(500).send('Authentication failed');
      }

      // Store access token securely (valid for 1 year by default)
      req.session.accessToken = oauthAccessToken;

      // Token expiration included in results.edam_expires
      console.log('Token expires:', new Date(parseInt(results.edam_expires)));

      res.redirect('/dashboard');
    }
  );
});

Step 6: Verify Connection

// Create authenticated client and verify
const authenticatedClient = new Evernote.Client({
  token: req.session.accessToken,
  sandbox: true
});

const userStore = authenticatedClient.getUserStore();
const noteStore = authenticatedClient.getNoteStore();

// Verify connection
userStore.getUser().then(user => {
  console.log('Authenticated as:', user.username);
  console.log('User ID:', user.id);
}).catch(err => {
  console.error('Authentication verification failed:', err);
});

Development Tokens (Sandbox Only)

For development, you can use a Developer Token instead of full OAuth:

  1. Create a sandbox account at https://sandbox.evernote.com
  2. Get a Developer Token from https://sandbox.evernote.com/api/DeveloperToken.action
  3. Use directly without OAuth flow:
const client = new Evernote.Client({
  token: process.env.EVERNOTE_DEV_TOKEN,
  sandbox: true
});

const noteStore = client.getNoteStore();

Note: Developer tokens are currently unavailable for production. Use OAuth for production applications.

Output

  • Installed SDK package in node_modules or site-packages
  • Environment variables configured
  • Working OAuth flow implementation
  • Successful connection verification

Error Handling

ErrorCauseSolution
Invalid consumer keyWrong or unapproved keyVerify key from developer portal
OAuth signature mismatchIncorrect consumer secretCheck secret matches portal
Token expiredAccess token > 1 year oldRe-authenticate user via OAuth
RATE_LIMIT_REACHEDToo many API callsImplement exponential backoff
Permission deniedInsufficient API key permissionsRequest additional permissions

Token Expiration

  • Default token validity: 1 year
  • Users can reduce to: 1 day, 1 week, or 1 month
  • Expiration timestamp in edam_expires parameter
  • Implement token refresh before expiration

Resources

Next Steps

After successful auth, proceed to evernote-hello-world for your first note creation.